rubyvis 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (443) hide show
  1. data/History.txt +6 -1
  2. data/Manifest.txt +421 -1
  3. data/README.txt +12 -10
  4. data/examples/first.rb +2 -2
  5. data/examples/second.rb +6 -3
  6. data/lib/rubyvis.rb +18 -3
  7. data/lib/rubyvis/mark.rb +101 -83
  8. data/lib/rubyvis/mark/anchor.rb +5 -7
  9. data/lib/rubyvis/mark/area.rb +19 -17
  10. data/lib/rubyvis/mark/bar.rb +3 -10
  11. data/lib/rubyvis/mark/label.rb +3 -4
  12. data/lib/rubyvis/mark/line.rb +20 -4
  13. data/lib/rubyvis/mark/panel.rb +31 -6
  14. data/lib/rubyvis/mark/rule.rb +8 -4
  15. data/lib/rubyvis/property.rb +11 -0
  16. data/lib/rubyvis/scene/svg_label.rb +1 -1
  17. data/lib/rubyvis/scene/svg_scene.rb +2 -1
  18. data/lib/rubyvis/sceneelement.rb +2 -0
  19. data/spec/bar_spec.rb +50 -0
  20. data/spec/label_spec.rb +41 -0
  21. data/spec/mark_spec.rb +16 -0
  22. data/spec/panel_spec.rb +22 -4
  23. data/spec/spec_helper.rb +1 -0
  24. data/vendor/FUTURE +62 -0
  25. data/vendor/Makefile +138 -0
  26. data/vendor/TODO +22 -0
  27. data/vendor/examples/antibiotics/antibiotics-scatter.html +113 -0
  28. data/vendor/examples/antibiotics/antibiotics.html +140 -0
  29. data/vendor/examples/antibiotics/antibiotics.js +20 -0
  30. data/vendor/examples/barley/barley.html +102 -0
  31. data/vendor/examples/barley/barley.js +122 -0
  32. data/vendor/examples/cars/cars.html +90 -0
  33. data/vendor/examples/cars/cars.js +408 -0
  34. data/vendor/examples/clock/clock.html +91 -0
  35. data/vendor/examples/crimea/crimea-grouped-bar.html +65 -0
  36. data/vendor/examples/crimea/crimea-line.html +61 -0
  37. data/vendor/examples/crimea/crimea-stacked-area.html +61 -0
  38. data/vendor/examples/crimea/crimea-stacked-bar.html +60 -0
  39. data/vendor/examples/crimea/crimea.html +100 -0
  40. data/vendor/examples/crimea/crimea.js +33 -0
  41. data/vendor/examples/downloadify/LICENSE.txt +22 -0
  42. data/vendor/examples/downloadify/download.png +0 -0
  43. data/vendor/examples/downloadify/downloadify.html +57 -0
  44. data/vendor/examples/downloadify/downloadify.min.js +3 -0
  45. data/vendor/examples/downloadify/downloadify.swf +0 -0
  46. data/vendor/examples/downloadify/swfobject.js +4 -0
  47. data/vendor/examples/ex.css +17 -0
  48. data/vendor/examples/eyes/eyes.html +53 -0
  49. data/vendor/examples/eyes/matrix.html +44 -0
  50. data/vendor/examples/flowers/flowers.html +109 -0
  51. data/vendor/examples/flowers/flowers.js +154 -0
  52. data/vendor/examples/group-stack/group-stack.html +79 -0
  53. data/vendor/examples/group-stack/headcount.js +23 -0
  54. data/vendor/examples/hotel/hotel.html +76 -0
  55. data/vendor/examples/hotel/hotel.js +245 -0
  56. data/vendor/examples/jobs/jobs.html +71 -0
  57. data/vendor/examples/jobs/jobs.js +1024 -0
  58. data/vendor/examples/jquery-1.4.2.min.js +154 -0
  59. data/vendor/examples/nba/nba.html +83 -0
  60. data/vendor/examples/nba/nba.js +53 -0
  61. data/vendor/examples/nba/nba2.html +82 -0
  62. data/vendor/examples/sankey/gdp2009.js +184 -0
  63. data/vendor/examples/sankey/sankey.html +77 -0
  64. data/vendor/examples/slider/cell.html +112 -0
  65. data/vendor/examples/slider/cell.js +31 -0
  66. data/vendor/examples/slider/horizon.html +85 -0
  67. data/vendor/examples/slider/jquery-ui-1.8rc3.custom.min.js +71 -0
  68. data/vendor/examples/slider/slider.html +50 -0
  69. data/vendor/examples/slider/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  70. data/vendor/examples/slider/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  71. data/vendor/examples/slider/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
  72. data/vendor/examples/slider/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  73. data/vendor/examples/slider/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  74. data/vendor/examples/slider/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  75. data/vendor/examples/slider/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  76. data/vendor/examples/slider/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  77. data/vendor/examples/slider/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  78. data/vendor/examples/slider/ui-lightness/images/ui-icons_222222_256x240.png +2 -0
  79. data/vendor/examples/slider/ui-lightness/images/ui-icons_228ef1_256x240.png +2 -0
  80. data/vendor/examples/slider/ui-lightness/images/ui-icons_ef8c08_256x240.png +2 -0
  81. data/vendor/examples/slider/ui-lightness/images/ui-icons_ffd27a_256x240.png +2 -0
  82. data/vendor/examples/slider/ui-lightness/images/ui-icons_ffffff_256x240.png +2 -0
  83. data/vendor/examples/slider/ui-lightness/jquery-ui-1.8rc3.custom.css +302 -0
  84. data/vendor/examples/tipsy/jquery.tipsy.js +198 -0
  85. data/vendor/examples/tipsy/tipsy-bar.html +65 -0
  86. data/vendor/examples/tipsy/tipsy-line.html +67 -0
  87. data/vendor/examples/tipsy/tipsy.css +12 -0
  88. data/vendor/examples/tipsy/tipsy.gif +0 -0
  89. data/vendor/examples/tipsy/tipsy.js +66 -0
  90. data/vendor/examples/weather/weather.html +86 -0
  91. data/vendor/examples/weather/weather.js +42 -0
  92. data/vendor/examples/wheat/wheat.html +130 -0
  93. data/vendor/examples/wheat/wheat.js +70 -0
  94. data/vendor/lib/google-compiler/COPYING +202 -0
  95. data/vendor/lib/google-compiler/README +224 -0
  96. data/vendor/lib/google-compiler/compiler-20100201.jar +0 -0
  97. data/vendor/protovis-d3.3.js +15726 -0
  98. data/vendor/protovis-r3.3.js +287 -0
  99. data/vendor/src/behavior/Behavior.js +32 -0
  100. data/vendor/src/behavior/Drag.js +112 -0
  101. data/vendor/src/behavior/Pan.js +110 -0
  102. data/vendor/src/behavior/Point.js +157 -0
  103. data/vendor/src/behavior/Resize.js +104 -0
  104. data/vendor/src/behavior/Select.js +100 -0
  105. data/vendor/src/behavior/Zoom.js +85 -0
  106. data/vendor/src/color/Color.js +598 -0
  107. data/vendor/src/color/Colors.js +135 -0
  108. data/vendor/src/color/Ramp.js +17 -0
  109. data/vendor/src/data/Arrays.js +277 -0
  110. data/vendor/src/data/Dom.js +380 -0
  111. data/vendor/src/data/Flatten.js +146 -0
  112. data/vendor/src/data/Histogram.js +120 -0
  113. data/vendor/src/data/LinearScale.js +54 -0
  114. data/vendor/src/data/LogScale.js +142 -0
  115. data/vendor/src/data/Nest.js +257 -0
  116. data/vendor/src/data/Numbers.js +313 -0
  117. data/vendor/src/data/Objects.js +78 -0
  118. data/vendor/src/data/OrdinalScale.js +267 -0
  119. data/vendor/src/data/QuantileScale.js +180 -0
  120. data/vendor/src/data/QuantitativeScale.js +440 -0
  121. data/vendor/src/data/RootScale.js +55 -0
  122. data/vendor/src/data/Scale.js +86 -0
  123. data/vendor/src/data/Transform.js +109 -0
  124. data/vendor/src/data/Tree.js +124 -0
  125. data/vendor/src/data/Vector.js +118 -0
  126. data/vendor/src/geo/Geo.js +5 -0
  127. data/vendor/src/geo/GeoScale.js +307 -0
  128. data/vendor/src/geo/LatLng.js +23 -0
  129. data/vendor/src/geo/Projection.js +43 -0
  130. data/vendor/src/geo/Projections.js +117 -0
  131. data/vendor/src/lang/Array.js +112 -0
  132. data/vendor/src/lang/init.js +26 -0
  133. data/vendor/src/layout/Arc.js +178 -0
  134. data/vendor/src/layout/Bullet.js +164 -0
  135. data/vendor/src/layout/Cluster.js +205 -0
  136. data/vendor/src/layout/Force.js +309 -0
  137. data/vendor/src/layout/Grid.js +119 -0
  138. data/vendor/src/layout/Hierarchy.js +249 -0
  139. data/vendor/src/layout/Horizon.js +159 -0
  140. data/vendor/src/layout/Indent.js +83 -0
  141. data/vendor/src/layout/Layout.js +56 -0
  142. data/vendor/src/layout/Matrix.js +177 -0
  143. data/vendor/src/layout/Network.js +302 -0
  144. data/vendor/src/layout/Pack.js +323 -0
  145. data/vendor/src/layout/Partition.js +203 -0
  146. data/vendor/src/layout/Rollup.js +203 -0
  147. data/vendor/src/layout/Stack.js +391 -0
  148. data/vendor/src/layout/Tree.js +282 -0
  149. data/vendor/src/layout/Treemap.js +347 -0
  150. data/vendor/src/mark/Anchor.js +81 -0
  151. data/vendor/src/mark/Area.js +268 -0
  152. data/vendor/src/mark/Bar.js +93 -0
  153. data/vendor/src/mark/Dot.js +212 -0
  154. data/vendor/src/mark/Ease.js +150 -0
  155. data/vendor/src/mark/Image.js +154 -0
  156. data/vendor/src/mark/Label.js +155 -0
  157. data/vendor/src/mark/Line.js +195 -0
  158. data/vendor/src/mark/Mark.js +1237 -0
  159. data/vendor/src/mark/Panel.js +273 -0
  160. data/vendor/src/mark/Rule.js +143 -0
  161. data/vendor/src/mark/Transient.js +7 -0
  162. data/vendor/src/mark/Transition.js +195 -0
  163. data/vendor/src/mark/Wedge.js +244 -0
  164. data/vendor/src/physics/BoundConstraint.js +75 -0
  165. data/vendor/src/physics/ChargeForce.js +184 -0
  166. data/vendor/src/physics/CollisionConstraint.js +113 -0
  167. data/vendor/src/physics/Constraint.js +26 -0
  168. data/vendor/src/physics/DragForce.js +49 -0
  169. data/vendor/src/physics/Force.js +25 -0
  170. data/vendor/src/physics/Particle.js +81 -0
  171. data/vendor/src/physics/PositionConstraint.js +72 -0
  172. data/vendor/src/physics/Quadtree.js +195 -0
  173. data/vendor/src/physics/Simulation.js +159 -0
  174. data/vendor/src/physics/SpringForce.js +141 -0
  175. data/vendor/src/pv-internals.js +154 -0
  176. data/vendor/src/pv.js +95 -0
  177. data/vendor/src/scene/SvgArea.js +172 -0
  178. data/vendor/src/scene/SvgBar.js +28 -0
  179. data/vendor/src/scene/SvgCurve.js +354 -0
  180. data/vendor/src/scene/SvgDot.js +81 -0
  181. data/vendor/src/scene/SvgImage.js +45 -0
  182. data/vendor/src/scene/SvgLabel.js +46 -0
  183. data/vendor/src/scene/SvgLine.js +159 -0
  184. data/vendor/src/scene/SvgPanel.js +126 -0
  185. data/vendor/src/scene/SvgRule.js +26 -0
  186. data/vendor/src/scene/SvgScene.js +185 -0
  187. data/vendor/src/scene/SvgWedge.js +66 -0
  188. data/vendor/src/text/DateFormat.js +262 -0
  189. data/vendor/src/text/Format.js +78 -0
  190. data/vendor/src/text/NumberFormat.js +227 -0
  191. data/vendor/src/text/TimeFormat.js +115 -0
  192. data/vendor/test1.html +30 -0
  193. data/vendor/tests/behavior/drag-events.html +47 -0
  194. data/vendor/tests/behavior/drag.html +32 -0
  195. data/vendor/tests/behavior/drag2.html +33 -0
  196. data/vendor/tests/behavior/point-area-stacked.html +73 -0
  197. data/vendor/tests/behavior/point-area-stacked2.html +70 -0
  198. data/vendor/tests/behavior/point-area.html +67 -0
  199. data/vendor/tests/behavior/point-bar.html +62 -0
  200. data/vendor/tests/behavior/point-dot.html +60 -0
  201. data/vendor/tests/behavior/point-line.html +62 -0
  202. data/vendor/tests/behavior/point-lines-grid.html +65 -0
  203. data/vendor/tests/behavior/point-lines.html +61 -0
  204. data/vendor/tests/behavior/point-wedge.html +43 -0
  205. data/vendor/tests/behavior/resize.html +69 -0
  206. data/vendor/tests/behavior/select.html +37 -0
  207. data/vendor/tests/bzr.js +62 -0
  208. data/vendor/tests/center.js +13 -0
  209. data/vendor/tests/data/deviation.html +54 -0
  210. data/vendor/tests/data/histogram-discrete.html +50 -0
  211. data/vendor/tests/data/histogram.html +56 -0
  212. data/vendor/tests/data/log-adjusted.html +48 -0
  213. data/vendor/tests/data/log-ceil.html +48 -0
  214. data/vendor/tests/data/log-floor.html +48 -0
  215. data/vendor/tests/data/log-symmetric.html +48 -0
  216. data/vendor/tests/data/log.html +48 -0
  217. data/vendor/tests/data/max-index.html +36 -0
  218. data/vendor/tests/data/max.html +36 -0
  219. data/vendor/tests/data/min-index.html +36 -0
  220. data/vendor/tests/data/min.html +36 -0
  221. data/vendor/tests/data/ordinal-split-banded.html +45 -0
  222. data/vendor/tests/data/ordinal-split-banded2.html +45 -0
  223. data/vendor/tests/data/ordinal-split-flush.html +51 -0
  224. data/vendor/tests/data/ordinal-split.html +51 -0
  225. data/vendor/tests/data/range.html +105 -0
  226. data/vendor/tests/data/scale-date.html +46 -0
  227. data/vendor/tests/data/scale-date2.html +38 -0
  228. data/vendor/tests/data/scale-date3.html +38 -0
  229. data/vendor/tests/data/scale-date4.html +38 -0
  230. data/vendor/tests/data/scale-degenerate.html +143 -0
  231. data/vendor/tests/data/scale-linear.html +59 -0
  232. data/vendor/tests/data/scale-log.html +60 -0
  233. data/vendor/tests/data/scale-log2.html +60 -0
  234. data/vendor/tests/data/scale-log3.html +60 -0
  235. data/vendor/tests/data/scale-log4.html +60 -0
  236. data/vendor/tests/data/scale-log5.html +60 -0
  237. data/vendor/tests/data/scale-log6.html +60 -0
  238. data/vendor/tests/data/scale-quantile.html +47 -0
  239. data/vendor/tests/data/scale-quantile2.html +50 -0
  240. data/vendor/tests/data/scale-quantile3.html +48 -0
  241. data/vendor/tests/data/scale-root.html +60 -0
  242. data/vendor/tests/data/scale-root2.html +39 -0
  243. data/vendor/tests/data/scale-tick-format.html +54 -0
  244. data/vendor/tests/data/scale-ticks.html +45 -0
  245. data/vendor/tests/data/sum.html +42 -0
  246. data/vendor/tests/data/variance.html +42 -0
  247. data/vendor/tests/diamond.js +40 -0
  248. data/vendor/tests/flare-imports.js +222 -0
  249. data/vendor/tests/flare.js +284 -0
  250. data/vendor/tests/geo/countries-hires.js +257 -0
  251. data/vendor/tests/geo/countries-lores.js +197 -0
  252. data/vendor/tests/geo/population.js +250 -0
  253. data/vendor/tests/geo/scale-aitoff.html +58 -0
  254. data/vendor/tests/geo/scale-gall-peters.html +56 -0
  255. data/vendor/tests/geo/scale-hammer.html +58 -0
  256. data/vendor/tests/geo/scale-identity.html +56 -0
  257. data/vendor/tests/geo/scale-mercator.html +56 -0
  258. data/vendor/tests/geo/scale-sinusoidal.html +57 -0
  259. data/vendor/tests/geo/scale-smart-domain.html +58 -0
  260. data/vendor/tests/geo/scale.html +55 -0
  261. data/vendor/tests/geo/scale2.html +40 -0
  262. data/vendor/tests/geo/us-states.js +61 -0
  263. data/vendor/tests/heatmap.js +63 -0
  264. data/vendor/tests/lang/globals.html +41 -0
  265. data/vendor/tests/lang/init.html +31 -0
  266. data/vendor/tests/layers.js +28 -0
  267. data/vendor/tests/layout/arc-directed.html +33 -0
  268. data/vendor/tests/layout/arc-radial.html +36 -0
  269. data/vendor/tests/layout/arc-undirected.html +32 -0
  270. data/vendor/tests/layout/arc.html +33 -0
  271. data/vendor/tests/layout/arc2.html +32 -0
  272. data/vendor/tests/layout/bullet-multiples.html +60 -0
  273. data/vendor/tests/layout/bullet.html +45 -0
  274. data/vendor/tests/layout/bullets.js +37 -0
  275. data/vendor/tests/layout/cluster-fill-group.html +24 -0
  276. data/vendor/tests/layout/cluster-fill.html +28 -0
  277. data/vendor/tests/layout/cluster-partition-radial-fill.html +43 -0
  278. data/vendor/tests/layout/cluster-radial-fill-radius.html +26 -0
  279. data/vendor/tests/layout/cluster-radial-fill.html +29 -0
  280. data/vendor/tests/layout/cluster-radial-group-fill.html +30 -0
  281. data/vendor/tests/layout/cluster-radial-radius.html +30 -0
  282. data/vendor/tests/layout/cluster-radial.html +28 -0
  283. data/vendor/tests/layout/cluster-radial2.html +33 -0
  284. data/vendor/tests/layout/cluster.html +34 -0
  285. data/vendor/tests/layout/cluster2.html +32 -0
  286. data/vendor/tests/layout/force-toggle.html +46 -0
  287. data/vendor/tests/layout/force.html +45 -0
  288. data/vendor/tests/layout/force2.html +58 -0
  289. data/vendor/tests/layout/force3.html +41 -0
  290. data/vendor/tests/layout/force4.html +45 -0
  291. data/vendor/tests/layout/force5.html +53 -0
  292. data/vendor/tests/layout/grid-cols.html +31 -0
  293. data/vendor/tests/layout/grid-heatmap.html +25 -0
  294. data/vendor/tests/layout/grid-rows.html +31 -0
  295. data/vendor/tests/layout/grid.html +34 -0
  296. data/vendor/tests/layout/horizon-color.html +31 -0
  297. data/vendor/tests/layout/horizon.html +31 -0
  298. data/vendor/tests/layout/indent-toggle.html +62 -0
  299. data/vendor/tests/layout/indent.html +25 -0
  300. data/vendor/tests/layout/indent2.html +33 -0
  301. data/vendor/tests/layout/matrix-sort.html +28 -0
  302. data/vendor/tests/layout/matrix.html +35 -0
  303. data/vendor/tests/layout/network.html +43 -0
  304. data/vendor/tests/layout/pack-bubble.html +45 -0
  305. data/vendor/tests/layout/pack.html +26 -0
  306. data/vendor/tests/layout/pack2.html +32 -0
  307. data/vendor/tests/layout/partition-fill.html +27 -0
  308. data/vendor/tests/layout/partition-fill2.html +22 -0
  309. data/vendor/tests/layout/partition-fill3.html +27 -0
  310. data/vendor/tests/layout/partition-radial-fill-radius.html +25 -0
  311. data/vendor/tests/layout/partition-radial-fill.html +26 -0
  312. data/vendor/tests/layout/partition-radial-fill2.html +23 -0
  313. data/vendor/tests/layout/partition-radial-fill3.html +29 -0
  314. data/vendor/tests/layout/partition-radial-radius.html +29 -0
  315. data/vendor/tests/layout/partition-radial.html +30 -0
  316. data/vendor/tests/layout/partition-radial2.html +33 -0
  317. data/vendor/tests/layout/partition.html +33 -0
  318. data/vendor/tests/layout/partition2.html +32 -0
  319. data/vendor/tests/layout/rollup.html +50 -0
  320. data/vendor/tests/layout/stack-empty.html +27 -0
  321. data/vendor/tests/layout/stack-expand.html +41 -0
  322. data/vendor/tests/layout/stack-reverse.html +42 -0
  323. data/vendor/tests/layout/stack-right.html +42 -0
  324. data/vendor/tests/layout/stack-rule.html +61 -0
  325. data/vendor/tests/layout/stack-visible.html +43 -0
  326. data/vendor/tests/layout/stack.html +53 -0
  327. data/vendor/tests/layout/tree-radial.html +31 -0
  328. data/vendor/tests/layout/tree-radial2.html +34 -0
  329. data/vendor/tests/layout/tree-toggle.html +36 -0
  330. data/vendor/tests/layout/tree.html +31 -0
  331. data/vendor/tests/layout/tree2.html +35 -0
  332. data/vendor/tests/layout/treemap-hierarchy.html +40 -0
  333. data/vendor/tests/layout/treemap-margin.html +26 -0
  334. data/vendor/tests/layout/treemap-round.html +40 -0
  335. data/vendor/tests/layout/treemap-slice.html +34 -0
  336. data/vendor/tests/layout/treemap.html +37 -0
  337. data/vendor/tests/life.js +212 -0
  338. data/vendor/tests/mark/anchor.html +25 -0
  339. data/vendor/tests/mark/area-anchor-chain.html +42 -0
  340. data/vendor/tests/mark/area-anchor-line.html +57 -0
  341. data/vendor/tests/mark/area-anchor-stack.html +35 -0
  342. data/vendor/tests/mark/area-anchor.html +43 -0
  343. data/vendor/tests/mark/area-anchor2.html +33 -0
  344. data/vendor/tests/mark/area-cardinal.html +57 -0
  345. data/vendor/tests/mark/area-monotone.html +57 -0
  346. data/vendor/tests/mark/area-segmented-basis.html +30 -0
  347. data/vendor/tests/mark/area-segmented-cardinal.html +30 -0
  348. data/vendor/tests/mark/area-segmented-monotone.html +30 -0
  349. data/vendor/tests/mark/area-segmented-step.html +44 -0
  350. data/vendor/tests/mark/area-segmented.html +29 -0
  351. data/vendor/tests/mark/area-stacked-cardinal.html +54 -0
  352. data/vendor/tests/mark/area-stacked-monotone.html +54 -0
  353. data/vendor/tests/mark/area-stacked.html +53 -0
  354. data/vendor/tests/mark/area-step.html +43 -0
  355. data/vendor/tests/mark/area-zero.html +32 -0
  356. data/vendor/tests/mark/area.html +57 -0
  357. data/vendor/tests/mark/bar-anchor-stack.html +51 -0
  358. data/vendor/tests/mark/bar-anchor.html +44 -0
  359. data/vendor/tests/mark/bar-column-grouped.html +63 -0
  360. data/vendor/tests/mark/bar-column-stacked.html +56 -0
  361. data/vendor/tests/mark/bar-column.html +54 -0
  362. data/vendor/tests/mark/bar-grouped.html +63 -0
  363. data/vendor/tests/mark/bar-stacked.html +57 -0
  364. data/vendor/tests/mark/bar.html +54 -0
  365. data/vendor/tests/mark/cursor.html +41 -0
  366. data/vendor/tests/mark/def-type.html +23 -0
  367. data/vendor/tests/mark/dot-anchor.html +33 -0
  368. data/vendor/tests/mark/dot-radius.html +22 -0
  369. data/vendor/tests/mark/dot-stroke.html +43 -0
  370. data/vendor/tests/mark/dot.html +52 -0
  371. data/vendor/tests/mark/dot2.html +61 -0
  372. data/vendor/tests/mark/ease.html +90 -0
  373. data/vendor/tests/mark/event-dblclick.html +30 -0
  374. data/vendor/tests/mark/event-prototype.html +45 -0
  375. data/vendor/tests/mark/event-render.html +45 -0
  376. data/vendor/tests/mark/event.html +24 -0
  377. data/vendor/tests/mark/image-color-inherit.html +33 -0
  378. data/vendor/tests/mark/image-color.html +35 -0
  379. data/vendor/tests/mark/image-color2.html +35 -0
  380. data/vendor/tests/mark/image-heatmap.html +29 -0
  381. data/vendor/tests/mark/image.html +32 -0
  382. data/vendor/tests/mark/label-break.html +54 -0
  383. data/vendor/tests/mark/label-decoration.html +22 -0
  384. data/vendor/tests/mark/label-events.html +32 -0
  385. data/vendor/tests/mark/line-anchor.html +42 -0
  386. data/vendor/tests/mark/line-basis.html +54 -0
  387. data/vendor/tests/mark/line-brownian.html +57 -0
  388. data/vendor/tests/mark/line-cardinal.html +77 -0
  389. data/vendor/tests/mark/line-catmull-rom.html +78 -0
  390. data/vendor/tests/mark/line-curve.html +65 -0
  391. data/vendor/tests/mark/line-eccentricity.html +39 -0
  392. data/vendor/tests/mark/line-fill.html +24 -0
  393. data/vendor/tests/mark/line-join.html +51 -0
  394. data/vendor/tests/mark/line-monotone-non-monotone.html +53 -0
  395. data/vendor/tests/mark/line-monotone-two-way.html +61 -0
  396. data/vendor/tests/mark/line-monotone.html +53 -0
  397. data/vendor/tests/mark/line-polar.html +36 -0
  398. data/vendor/tests/mark/line-segmented-basis.html +57 -0
  399. data/vendor/tests/mark/line-segmented-cardinal.html +80 -0
  400. data/vendor/tests/mark/line-segmented-join.html +52 -0
  401. data/vendor/tests/mark/line-segmented-monotone.html +56 -0
  402. data/vendor/tests/mark/line-segmented-polar.html +30 -0
  403. data/vendor/tests/mark/line-segmented-step.html +41 -0
  404. data/vendor/tests/mark/line-segmented-step2.html +32 -0
  405. data/vendor/tests/mark/line-segmented.html +30 -0
  406. data/vendor/tests/mark/line-step.html +39 -0
  407. data/vendor/tests/mark/line-tension.html +59 -0
  408. data/vendor/tests/mark/line.html +51 -0
  409. data/vendor/tests/mark/panel-anchor.html +37 -0
  410. data/vendor/tests/mark/panel-anchor2.html +31 -0
  411. data/vendor/tests/mark/panel-anchor3.html +22 -0
  412. data/vendor/tests/mark/panel-anchor4.html +28 -0
  413. data/vendor/tests/mark/panel-anchor5.html +28 -0
  414. data/vendor/tests/mark/panel-append.html +29 -0
  415. data/vendor/tests/mark/panel-canvas.html +107 -0
  416. data/vendor/tests/mark/panel-fill.html +50 -0
  417. data/vendor/tests/mark/panel-mouse.html +53 -0
  418. data/vendor/tests/mark/panel-transform.html +67 -0
  419. data/vendor/tests/mark/property-cast.html +24 -0
  420. data/vendor/tests/mark/render-partial.html +42 -0
  421. data/vendor/tests/mark/rule-anchor.html +29 -0
  422. data/vendor/tests/mark/title.html +41 -0
  423. data/vendor/tests/mark/transition-anchor.html +47 -0
  424. data/vendor/tests/mark/transition-wedge.html +47 -0
  425. data/vendor/tests/mark/transition.html +106 -0
  426. data/vendor/tests/mark/wedge-donut.html +35 -0
  427. data/vendor/tests/mark/wedge-implied.html +42 -0
  428. data/vendor/tests/mark/wedge-pie.html +37 -0
  429. data/vendor/tests/mark/wedge-ring.html +27 -0
  430. data/vendor/tests/miserables.js +348 -0
  431. data/vendor/tests/physics/dorling.html +70 -0
  432. data/vendor/tests/physics/simulation.html +56 -0
  433. data/vendor/tests/social.js +28 -0
  434. data/vendor/tests/stanford.png +0 -0
  435. data/vendor/tests/style.css +5 -0
  436. data/vendor/tests/testify.css +29 -0
  437. data/vendor/tests/testify.js +16 -0
  438. data/vendor/tests/text/format-number.html +75 -0
  439. data/web/first.svg +1 -0
  440. data/web/index.html +48 -0
  441. metadata +434 -31
  442. data.tar.gz.sig +0 -0
  443. metadata.gz.sig +0 -2
@@ -0,0 +1,203 @@
1
+ /**
2
+ * Constructs a new, empty rollup network layout. Layouts are not typically
3
+ * constructed directly; instead, they are added to an existing panel via
4
+ * {@link pv.Mark#add}.
5
+ *
6
+ * @class Implements a network visualization using a node-link diagram where
7
+ * nodes are rolled up along two dimensions. This implementation is based on the
8
+ * "PivotGraph" designed by Martin Wattenberg:
9
+ *
10
+ * <blockquote>The method is designed for graphs that are "multivariate", i.e.,
11
+ * where each node is associated with several attributes. Unlike visualizations
12
+ * which emphasize global graph topology, PivotGraph uses a simple grid-based
13
+ * approach to focus on the relationship between node attributes &amp;
14
+ * connections.</blockquote>
15
+ *
16
+ * This layout requires two psuedo-properties to be specified, which assign node
17
+ * positions along the two dimensions {@link #x} and {@link #y}, corresponding
18
+ * to the left and top properties, respectively. Typically, these functions are
19
+ * specified using an {@link pv.Scale.ordinal}. Nodes that share the same
20
+ * position in <i>x</i> and <i>y</i> are "rolled up" into a meta-node, and
21
+ * similarly links are aggregated between meta-nodes. For example, to construct
22
+ * a rollup to analyze links by gender and affiliation, first define two ordinal
23
+ * scales:
24
+ *
25
+ * <pre>var x = pv.Scale.ordinal(nodes, function(d) d.gender).split(0, w),
26
+ * y = pv.Scale.ordinal(nodes, function(d) d.aff).split(0, h);</pre>
27
+ *
28
+ * Next, define the position psuedo-properties:
29
+ *
30
+ * <pre> .x(function(d) x(d.gender))
31
+ * .y(function(d) y(d.aff))</pre>
32
+ *
33
+ * Linear and other quantitative scales can alternatively be used to position
34
+ * the nodes along either dimension. Note, however, that the rollup requires
35
+ * that the positions match exactly, and thus ordinal scales are recommended to
36
+ * avoid precision errors.
37
+ *
38
+ * <p>Note that because this layout provides a visualization of the rolled up
39
+ * graph, the data properties for the mark prototypes (<tt>node</tt>,
40
+ * <tt>link</tt> and <tt>label</tt>) are different from most other network
41
+ * layouts: they reference the rolled-up nodes and links, rather than the nodes
42
+ * and links of the full network. The underlying nodes and links for each
43
+ * rolled-up node and link can be accessed via the <tt>nodes</tt> and
44
+ * <tt>links</tt> attributes, respectively. The aggregated link values for
45
+ * rolled-up links can similarly be accessed via the <tt>linkValue</tt>
46
+ * attribute.
47
+ *
48
+ * <p>For undirected networks, links are duplicated in both directions. For
49
+ * directed networks, use <tt>directed(true)</tt>. The graph is assumed to be
50
+ * undirected by default.
51
+ *
52
+ * @extends pv.Layout.Network
53
+ * @see <a href="http://www.research.ibm.com/visual/papers/pivotgraph.pdf"
54
+ * >"Visual Exploration of Multivariate Graphs"</a> by M. Wattenberg, CHI 2006.
55
+ */
56
+ pv.Layout.Rollup = function() {
57
+ pv.Layout.Network.call(this);
58
+ var that = this,
59
+ nodes, // cached rollup nodes
60
+ links, // cached rollup links
61
+ buildImplied = that.buildImplied;
62
+
63
+ /** @private Cache layout state to optimize properties. */
64
+ this.buildImplied = function(s) {
65
+ buildImplied.call(this, s);
66
+ nodes = s.$rollup.nodes;
67
+ links = s.$rollup.links;
68
+ };
69
+
70
+ /* Render rollup nodes. */
71
+ this.node
72
+ .data(function() { return nodes; })
73
+ .shapeSize(function(d) { return d.nodes.length * 20; });
74
+
75
+ /* Render rollup links. */
76
+ this.link
77
+ .interpolate("polar")
78
+ .eccentricity(.8);
79
+
80
+ this.link.add = function(type) {
81
+ return that.add(pv.Panel)
82
+ .data(function() { return links; })
83
+ .add(type)
84
+ .extend(this);
85
+ };
86
+ };
87
+
88
+ pv.Layout.Rollup.prototype = pv.extend(pv.Layout.Network)
89
+ .property("directed", Boolean);
90
+
91
+ /**
92
+ * Whether the underlying network is directed. By default, the graph is assumed
93
+ * to be undirected, and links are rendered in both directions. If the network
94
+ * is directed, then forward links are drawn above the diagonal, while reverse
95
+ * links are drawn below.
96
+ *
97
+ * @type boolean
98
+ * @name pv.Layout.Rollup.prototype.directed
99
+ */
100
+
101
+ /**
102
+ * Specifies the <i>x</i>-position function used to rollup nodes. The rolled up
103
+ * nodes are positioned horizontally using the return values from the given
104
+ * function. Typically the function is specified as an ordinal scale. For
105
+ * single-dimension rollups, a constant value can be specified.
106
+ *
107
+ * @param {function} f the <i>x</i>-position function.
108
+ * @returns {pv.Layout.Rollup} this.
109
+ * @see pv.Scale.ordinal
110
+ */
111
+ pv.Layout.Rollup.prototype.x = function(f) {
112
+ this.$x = pv.functor(f);
113
+ return this;
114
+ };
115
+
116
+ /**
117
+ * Specifies the <i>y</i>-position function used to rollup nodes. The rolled up
118
+ * nodes are positioned vertically using the return values from the given
119
+ * function. Typically the function is specified as an ordinal scale. For
120
+ * single-dimension rollups, a constant value can be specified.
121
+ *
122
+ * @param {function} f the <i>y</i>-position function.
123
+ * @returns {pv.Layout.Rollup} this.
124
+ * @see pv.Scale.ordinal
125
+ */
126
+ pv.Layout.Rollup.prototype.y = function(f) {
127
+ this.$y = pv.functor(f);
128
+ return this;
129
+ };
130
+
131
+ /** @private */
132
+ pv.Layout.Rollup.prototype.buildImplied = function(s) {
133
+ if (pv.Layout.Network.prototype.buildImplied.call(this, s)) return;
134
+
135
+ var nodes = s.nodes,
136
+ links = s.links,
137
+ directed = s.directed,
138
+ n = nodes.length,
139
+ x = [],
140
+ y = [],
141
+ rnindex = 0,
142
+ rnodes = {},
143
+ rlinks = {};
144
+
145
+ /** @private */
146
+ function id(i) {
147
+ return x[i] + "," + y[i];
148
+ }
149
+
150
+ /* Iterate over the data, evaluating the x and y functions. */
151
+ var stack = pv.Mark.stack, o = {parent: this};
152
+ stack.unshift(null);
153
+ for (var i = 0; i < n; i++) {
154
+ o.index = i;
155
+ stack[0] = nodes[i];
156
+ x[i] = this.$x.apply(o, stack);
157
+ y[i] = this.$y.apply(o, stack);
158
+ }
159
+ stack.shift();
160
+
161
+ /* Compute rollup nodes. */
162
+ for (var i = 0; i < nodes.length; i++) {
163
+ var nodeId = id(i),
164
+ rn = rnodes[nodeId];
165
+ if (!rn) {
166
+ rn = rnodes[nodeId] = pv.extend(nodes[i]);
167
+ rn.index = rnindex++;
168
+ rn.x = x[i];
169
+ rn.y = y[i];
170
+ rn.nodes = [];
171
+ }
172
+ rn.nodes.push(nodes[i]);
173
+ }
174
+
175
+ /* Compute rollup links. */
176
+ for (var i = 0; i < links.length; i++) {
177
+ var source = links[i].sourceNode,
178
+ target = links[i].targetNode,
179
+ rsource = rnodes[id(source.index)],
180
+ rtarget = rnodes[id(target.index)],
181
+ reverse = !directed && rsource.index > rtarget.index,
182
+ linkId = reverse
183
+ ? rtarget.index + "," + rsource.index
184
+ : rsource.index + "," + rtarget.index,
185
+ rl = rlinks[linkId];
186
+ if (!rl) {
187
+ rl = rlinks[linkId] = {
188
+ sourceNode: rsource,
189
+ targetNode: rtarget,
190
+ linkValue: 0,
191
+ links: []
192
+ };
193
+ }
194
+ rl.links.push(links[i]);
195
+ rl.linkValue += links[i].linkValue;
196
+ }
197
+
198
+ /* Export the rolled up nodes and links to the scene. */
199
+ s.$rollup = {
200
+ nodes: pv.values(rnodes),
201
+ links: pv.values(rlinks)
202
+ };
203
+ };
@@ -0,0 +1,391 @@
1
+ /**
2
+ * Constructs a new, empty stack layout. Layouts are not typically constructed
3
+ * directly; instead, they are added to an existing panel via
4
+ * {@link pv.Mark#add}.
5
+ *
6
+ * @class Implements a layout for stacked visualizations, ranging from simple
7
+ * stacked bar charts to more elaborate "streamgraphs" composed of stacked
8
+ * areas. Stack layouts uses length as a visual encoding, as opposed to
9
+ * position, as the layers do not share an aligned axis.
10
+ *
11
+ * <p>Marks can be stacked vertically or horizontally. For example,
12
+ *
13
+ * <pre>vis.add(pv.Layout.Stack)
14
+ * .layers([[1, 1.2, 1.7, 1.5, 1.7],
15
+ * [.5, 1, .8, 1.1, 1.3],
16
+ * [.2, .5, .8, .9, 1]])
17
+ * .x(function() this.index * 35)
18
+ * .y(function(d) d * 40)
19
+ * .layer.add(pv.Area);</pre>
20
+ *
21
+ * specifies a vertically-stacked area chart, using the default "bottom-left"
22
+ * orientation with "zero" offset. This visualization can be easily changed into
23
+ * a streamgraph using the "wiggle" offset, which attempts to minimize change in
24
+ * slope weighted by layer thickness. See the {@link #offset} property for more
25
+ * supported streamgraph algorithms.
26
+ *
27
+ * <p>In the simplest case, the layer data can be specified as a two-dimensional
28
+ * array of numbers. The <tt>x</tt> and <tt>y</tt> psuedo-properties are used to
29
+ * define the thickness of each layer at the given position, respectively; in
30
+ * the above example of the "bottom-left" orientation, the <tt>x</tt> and
31
+ * <tt>y</tt> psuedo-properties are equivalent to the <tt>left</tt> and
32
+ * <tt>height</tt> properties that you might use if you implemented a stacked
33
+ * area by hand.
34
+ *
35
+ * <p>The advantage of using the stack layout is that the baseline, i.e., the
36
+ * <tt>bottom</tt> property is computed automatically using the specified offset
37
+ * algorithm. In addition, the order of layers can be computed using a built-in
38
+ * algorithm via the <tt>order</tt> property.
39
+ *
40
+ * <p>With the exception of the "expand" <tt>offset</tt>, the stack layout does
41
+ * not perform any automatic scaling of data; the values returned from
42
+ * <tt>x</tt> and <tt>y</tt> specify pixel sizes. To simplify scaling math, use
43
+ * this layout in conjunction with {@link pv.Scale.linear} or similar.
44
+ *
45
+ * <p>In other cases, the <tt>values</tt> psuedo-property can be used to define
46
+ * the data more flexibly. As with a typical panel &amp; area, the
47
+ * <tt>layers</tt> property corresponds to the data in the enclosing panel,
48
+ * while the <tt>values</tt> psuedo-property corresponds to the data for the
49
+ * area within the panel. For example, given an array of data values:
50
+ *
51
+ * <pre>var crimea = [
52
+ * { date: "4/1854", wounds: 0, other: 110, disease: 110 },
53
+ * { date: "5/1854", wounds: 0, other: 95, disease: 105 },
54
+ * { date: "6/1854", wounds: 0, other: 40, disease: 95 },
55
+ * ...</pre>
56
+ *
57
+ * and a corresponding array of series names:
58
+ *
59
+ * <pre>var causes = ["wounds", "other", "disease"];</pre>
60
+ *
61
+ * Separate layers can be defined for each cause like so:
62
+ *
63
+ * <pre>vis.add(pv.Layout.Stack)
64
+ * .layers(causes)
65
+ * .values(crimea)
66
+ * .x(function(d) x(d.date))
67
+ * .y(function(d, p) y(d[p]))
68
+ * .layer.add(pv.Area)
69
+ * ...</pre>
70
+ *
71
+ * As with the panel &amp; area case, the datum that is passed to the
72
+ * psuedo-properties <tt>x</tt> and <tt>y</tt> are the values (an element in
73
+ * <tt>crimea</tt>); the second argument is the layer data (a string in
74
+ * <tt>causes</tt>). Additional arguments specify the data of enclosing panels,
75
+ * if any.
76
+ *
77
+ * @extends pv.Layout
78
+ */
79
+ pv.Layout.Stack = function() {
80
+ pv.Layout.call(this);
81
+ var that = this,
82
+ /** @ignore */ none = function() { return null; },
83
+ prop = {t: none, l: none, r: none, b: none, w: none, h: none},
84
+ values,
85
+ buildImplied = that.buildImplied;
86
+
87
+ /** @private Proxy the given property on the layer. */
88
+ function proxy(name) {
89
+ return function() {
90
+ return prop[name](this.parent.index, this.index);
91
+ };
92
+ }
93
+
94
+ /** @private Compute the layout! */
95
+ this.buildImplied = function(s) {
96
+ buildImplied.call(this, s);
97
+
98
+ var data = s.layers,
99
+ n = data.length,
100
+ m,
101
+ orient = s.orient,
102
+ horizontal = /^(top|bottom)\b/.test(orient),
103
+ h = this.parent[horizontal ? "height" : "width"](),
104
+ x = [],
105
+ y = [],
106
+ dy = [];
107
+
108
+ /*
109
+ * Iterate over the data, evaluating the values, x and y functions. The
110
+ * context in which the x and y psuedo-properties are evaluated is a
111
+ * pseudo-mark that is a grandchild of this layout.
112
+ */
113
+ var stack = pv.Mark.stack, o = {parent: {parent: this}};
114
+ stack.unshift(null);
115
+ values = [];
116
+ for (var i = 0; i < n; i++) {
117
+ dy[i] = [];
118
+ y[i] = [];
119
+ o.parent.index = i;
120
+ stack[0] = data[i];
121
+ values[i] = this.$values.apply(o.parent, stack);
122
+ if (!i) m = values[i].length;
123
+ stack.unshift(null);
124
+ for (var j = 0; j < m; j++) {
125
+ stack[0] = values[i][j];
126
+ o.index = j;
127
+ if (!i) x[j] = this.$x.apply(o, stack);
128
+ dy[i][j] = this.$y.apply(o, stack);
129
+ }
130
+ stack.shift();
131
+ }
132
+ stack.shift();
133
+
134
+ /* order */
135
+ var index;
136
+ switch (s.order) {
137
+ case "inside-out": {
138
+ var max = dy.map(function(v) { return pv.max.index(v); }),
139
+ map = pv.range(n).sort(function(a, b) { return max[a] - max[b]; }),
140
+ sums = dy.map(function(v) { return pv.sum(v); }),
141
+ top = 0,
142
+ bottom = 0,
143
+ tops = [],
144
+ bottoms = [];
145
+ for (var i = 0; i < n; i++) {
146
+ var j = map[i];
147
+ if (top < bottom) {
148
+ top += sums[j];
149
+ tops.push(j);
150
+ } else {
151
+ bottom += sums[j];
152
+ bottoms.push(j);
153
+ }
154
+ }
155
+ index = bottoms.reverse().concat(tops);
156
+ break;
157
+ }
158
+ case "reverse": index = pv.range(n - 1, -1, -1); break;
159
+ default: index = pv.range(n); break;
160
+ }
161
+
162
+ /* offset */
163
+ switch (s.offset) {
164
+ case "silohouette": {
165
+ for (var j = 0; j < m; j++) {
166
+ var o = 0;
167
+ for (var i = 0; i < n; i++) o += dy[i][j];
168
+ y[index[0]][j] = (h - o) / 2;
169
+ }
170
+ break;
171
+ }
172
+ case "wiggle": {
173
+ var o = 0;
174
+ for (var i = 0; i < n; i++) o += dy[i][0];
175
+ y[index[0]][0] = o = (h - o) / 2;
176
+ for (var j = 1; j < m; j++) {
177
+ var s1 = 0, s2 = 0, dx = x[j] - x[j - 1];
178
+ for (var i = 0; i < n; i++) s1 += dy[i][j];
179
+ for (var i = 0; i < n; i++) {
180
+ var s3 = (dy[index[i]][j] - dy[index[i]][j - 1]) / (2 * dx);
181
+ for (var k = 0; k < i; k++) {
182
+ s3 += (dy[index[k]][j] - dy[index[k]][j - 1]) / dx;
183
+ }
184
+ s2 += s3 * dy[index[i]][j];
185
+ }
186
+ y[index[0]][j] = o -= s1 ? s2 / s1 * dx : 0;
187
+ }
188
+ break;
189
+ }
190
+ case "expand": {
191
+ for (var j = 0; j < m; j++) {
192
+ y[index[0]][j] = 0;
193
+ var k = 0;
194
+ for (var i = 0; i < n; i++) k += dy[i][j];
195
+ if (k) {
196
+ k = h / k;
197
+ for (var i = 0; i < n; i++) dy[i][j] *= k;
198
+ } else {
199
+ k = h / n;
200
+ for (var i = 0; i < n; i++) dy[i][j] = k;
201
+ }
202
+ }
203
+ break;
204
+ }
205
+ default: {
206
+ for (var j = 0; j < m; j++) y[index[0]][j] = 0;
207
+ break;
208
+ }
209
+ }
210
+
211
+ /* Propagate the offset to the other series. */
212
+ for (var j = 0; j < m; j++) {
213
+ var o = y[index[0]][j];
214
+ for (var i = 1; i < n; i++) {
215
+ o += dy[index[i - 1]][j];
216
+ y[index[i]][j] = o;
217
+ }
218
+ }
219
+
220
+ /* Find the property definitions for dynamic substitution. */
221
+ var i = orient.indexOf("-"),
222
+ pdy = horizontal ? "h" : "w",
223
+ px = i < 0 ? (horizontal ? "l" : "b") : orient.charAt(i + 1),
224
+ py = orient.charAt(0);
225
+ for (var p in prop) prop[p] = none;
226
+ prop[px] = function(i, j) { return x[j]; };
227
+ prop[py] = function(i, j) { return y[i][j]; };
228
+ prop[pdy] = function(i, j) { return dy[i][j]; };
229
+ };
230
+
231
+ /**
232
+ * The layer prototype. This prototype is intended to be used with an area,
233
+ * bar or panel mark (or subclass thereof). Other mark types may be possible,
234
+ * though note that the stack layout is not currently designed to support
235
+ * radial stacked visualizations using wedges.
236
+ *
237
+ * <p>The layer is not a direct child of the stack layout; a hidden panel is
238
+ * used to replicate layers.
239
+ *
240
+ * @type pv.Mark
241
+ * @name pv.Layout.Stack.prototype.layer
242
+ */
243
+ this.layer = new pv.Mark()
244
+ .data(function() { return values[this.parent.index]; })
245
+ .top(proxy("t"))
246
+ .left(proxy("l"))
247
+ .right(proxy("r"))
248
+ .bottom(proxy("b"))
249
+ .width(proxy("w"))
250
+ .height(proxy("h"));
251
+
252
+ this.layer.add = function(type) {
253
+ return that.add(pv.Panel)
254
+ .data(function() { return that.layers(); })
255
+ .add(type)
256
+ .extend(this);
257
+ };
258
+ };
259
+
260
+ pv.Layout.Stack.prototype = pv.extend(pv.Layout)
261
+ .property("orient", String)
262
+ .property("offset", String)
263
+ .property("order", String)
264
+ .property("layers");
265
+
266
+ /**
267
+ * Default properties for stack layouts. The default orientation is
268
+ * "bottom-left", the default offset is "zero", and the default layers is
269
+ * <tt>[[]]</tt>.
270
+ *
271
+ * @type pv.Layout.Stack
272
+ */
273
+ pv.Layout.Stack.prototype.defaults = new pv.Layout.Stack()
274
+ .extend(pv.Layout.prototype.defaults)
275
+ .orient("bottom-left")
276
+ .offset("zero")
277
+ .layers([[]]);
278
+
279
+ /** @private */
280
+ pv.Layout.Stack.prototype.$x
281
+ = /** @private */ pv.Layout.Stack.prototype.$y
282
+ = function() { return 0; };
283
+
284
+ /**
285
+ * The x psuedo-property; determines the position of the value within the layer.
286
+ * This typically corresponds to the independent variable. For example, with the
287
+ * default "bottom-left" orientation, this function defines the "left" property.
288
+ *
289
+ * @param {function} f the x function.
290
+ * @returns {pv.Layout.Stack} this.
291
+ */
292
+ pv.Layout.Stack.prototype.x = function(f) {
293
+ /** @private */ this.$x = pv.functor(f);
294
+ return this;
295
+ };
296
+
297
+ /**
298
+ * The y psuedo-property; determines the thickness of the layer at the given
299
+ * value. This typically corresponds to the dependent variable. For example,
300
+ * with the default "bottom-left" orientation, this function defines the
301
+ * "height" property.
302
+ *
303
+ * @param {function} f the y function.
304
+ * @returns {pv.Layout.Stack} this.
305
+ */
306
+ pv.Layout.Stack.prototype.y = function(f) {
307
+ /** @private */ this.$y = pv.functor(f);
308
+ return this;
309
+ };
310
+
311
+ /** @private The default value function; identity. */
312
+ pv.Layout.Stack.prototype.$values = pv.identity;
313
+
314
+ /**
315
+ * The values function; determines the values for a given layer. The default
316
+ * value is the identity function, which assumes that the layers property is
317
+ * specified as a two-dimensional (i.e., nested) array.
318
+ *
319
+ * @param {function} f the values function.
320
+ * @returns {pv.Layout.Stack} this.
321
+ */
322
+ pv.Layout.Stack.prototype.values = function(f) {
323
+ this.$values = pv.functor(f);
324
+ return this;
325
+ };
326
+
327
+ /**
328
+ * The layer data in row-major order. The value of this property is typically a
329
+ * two-dimensional (i.e., nested) array, but any array can be used, provided the
330
+ * values psuedo-property is defined accordingly.
331
+ *
332
+ * @type array[]
333
+ * @name pv.Layout.Stack.prototype.layers
334
+ */
335
+
336
+ /**
337
+ * The layer orientation. The following values are supported:<ul>
338
+ *
339
+ * <li>bottom-left == bottom
340
+ * <li>bottom-right
341
+ * <li>top-left == top
342
+ * <li>top-right
343
+ * <li>left-top
344
+ * <li>left-bottom == left
345
+ * <li>right-top
346
+ * <li>right-bottom == right
347
+ *
348
+ * </ul>. The default value is "bottom-left", which means that the layers will
349
+ * be built from the bottom-up, and the values within layers will be laid out
350
+ * from left-to-right.
351
+ *
352
+ * <p>Note that with non-zero baselines, some orientations may give similar
353
+ * results. For example, offset("silohouette") centers the layers, resulting in
354
+ * a streamgraph. Thus, the orientations "bottom-left" and "top-left" will
355
+ * produce similar results, differing only in the layer order.
356
+ *
357
+ * @type string
358
+ * @name pv.Layout.Stack.prototype.orient
359
+ */
360
+
361
+ /**
362
+ * The layer order. The following values are supported:<ul>
363
+ *
364
+ * <li><i>null</i> - use given layer order.
365
+ * <li>inside-out - sort by maximum value, with balanced order.
366
+ * <li>reverse - use reverse of given layer order.
367
+ *
368
+ * </ul>For details on the inside-out order algorithm, refer to "Stacked Graphs
369
+ * -- Geometry &amp; Aesthetics" by L. Byron and M. Wattenberg, IEEE TVCG
370
+ * November/December 2008.
371
+ *
372
+ * @type string
373
+ * @name pv.Layout.Stack.prototype.order
374
+ */
375
+
376
+ /**
377
+ * The layer offset; the y-position of the bottom of the lowest layer. The
378
+ * following values are supported:<ul>
379
+ *
380
+ * <li>zero - use a zero baseline, i.e., the y-axis.
381
+ * <li>silohouette - center the stream, i.e., ThemeRiver.
382
+ * <li>wiggle - minimize weighted change in slope.
383
+ * <li>expand - expand layers to fill the enclosing layout dimensions.
384
+ *
385
+ * </ul>For details on these offset algorithms, refer to "Stacked Graphs --
386
+ * Geometry &amp; Aesthetics" by L. Byron and M. Wattenberg, IEEE TVCG
387
+ * November/December 2008.
388
+ *
389
+ * @type string
390
+ * @name pv.Layout.Stack.prototype.offset
391
+ */