rubyvis 0.1.0 → 0.1.1

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 (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,157 @@
1
+ /**
2
+ * Returns a new point behavior to be registered on mousemove events.
3
+ *
4
+ * @class Implements interactive fuzzy pointing, identifying marks that are in
5
+ * close proximity to the mouse cursor. This behavior is an alternative to the
6
+ * native mouseover and mouseout events, improving usability. Rather than
7
+ * requiring the user to mouseover a mark exactly, the mouse simply needs to
8
+ * move near the given mark and a "point" event is triggered. In addition, if
9
+ * multiple marks overlap, the point behavior can be used to identify the mark
10
+ * instance closest to the cursor, as opposed to the one that is rendered on
11
+ * top.
12
+ *
13
+ * <p>The point behavior can also identify the closest mark instance for marks
14
+ * that produce a continuous graphic primitive. The point behavior can thus be
15
+ * used to provide details-on-demand for both discrete marks (such as dots and
16
+ * bars), as well as continuous marks (such as lines and areas).
17
+ *
18
+ * <p>This behavior is implemented by finding the closest mark instance to the
19
+ * mouse cursor on every mousemove event. If this closest mark is within the
20
+ * given radius threshold, which defaults to 30 pixels, a "point" psuedo-event
21
+ * is dispatched to the given mark instance. If any mark were previously
22
+ * pointed, it would receive a corresponding "unpoint" event. These two
23
+ * psuedo-event types correspond to the native "mouseover" and "mouseout"
24
+ * events, respectively. To increase the radius at which the point behavior can
25
+ * be applied, specify an appropriate threshold to the constructor, up to
26
+ * <tt>Infinity</tt>.
27
+ *
28
+ * <p>By default, the standard Cartesian distance is computed. However, with
29
+ * some visualizations it is desirable to consider only a single dimension, such
30
+ * as the <i>x</i>-dimension for an independent variable. In this case, the
31
+ * collapse parameter can be set to collapse the <i>y</i> dimension:
32
+ *
33
+ * <pre> .event("mousemove", pv.Behavior.point(Infinity).collapse("y"))</pre>
34
+ *
35
+ * <p>This behavior only listens to mousemove events on the assigned panel,
36
+ * which is typically the root panel. The behavior will search recursively for
37
+ * descendant marks to point. If the mouse leaves the assigned panel, the
38
+ * behavior no longer receives mousemove events; an unpoint psuedo-event is
39
+ * automatically dispatched to unpoint any pointed mark. Marks may be re-pointed
40
+ * when the mouse reenters the panel.
41
+ *
42
+ * <p>Panels have transparent fill styles by default; this means that panels may
43
+ * not receive the initial mousemove event to start pointing. To fix this
44
+ * problem, either given the panel a visible fill style (such as "white"), or
45
+ * set the <tt>events</tt> property to "all" such that the panel receives events
46
+ * despite its transparent fill.
47
+ *
48
+ * <p>Note: this behavior does not currently wedge marks.
49
+ *
50
+ * @extends pv.Behavior
51
+ *
52
+ * @param {number} [r] the fuzzy radius threshold in pixels
53
+ * @see <a href="http://www.tovigrossman.com/papers/chi2005bubblecursor.pdf"
54
+ * >"The Bubble Cursor: Enhancing Target Acquisition by Dynamic Resizing of the
55
+ * Cursor's Activation Area"</a> by T. Grossman &amp; R. Balakrishnan, CHI 2005.
56
+ */
57
+ pv.Behavior.point = function(r) {
58
+ var unpoint, // the current pointer target
59
+ collapse = null, // dimensions to collapse
60
+ kx = 1, // x-dimension cost scale
61
+ ky = 1, // y-dimension cost scale
62
+ r2 = arguments.length ? r * r : 900; // fuzzy radius
63
+
64
+ /** @private Search for the mark closest to the mouse. */
65
+ function search(scene, index) {
66
+ var s = scene[index],
67
+ point = {cost: Infinity};
68
+ for (var i = 0, n = s.visible && s.children.length; i < n; i++) {
69
+ var child = s.children[i], mark = child.mark, p;
70
+ if (mark.type == "panel") {
71
+ mark.scene = child;
72
+ for (var j = 0, m = child.length; j < m; j++) {
73
+ mark.index = j;
74
+ p = search(child, j);
75
+ if (p.cost < point.cost) point = p;
76
+ }
77
+ delete mark.scene;
78
+ delete mark.index;
79
+ } else if (mark.$handlers.point) {
80
+ var v = mark.mouse();
81
+ for (var j = 0, m = child.length; j < m; j++) {
82
+ var c = child[j],
83
+ dx = v.x - c.left - (c.width || 0) / 2,
84
+ dy = v.y - c.top - (c.height || 0) / 2,
85
+ dd = kx * dx * dx + ky * dy * dy;
86
+ if (dd < point.cost) {
87
+ point.distance = dx * dx + dy * dy;
88
+ point.cost = dd;
89
+ point.scene = child;
90
+ point.index = j;
91
+ }
92
+ }
93
+ }
94
+ }
95
+ return point;
96
+ }
97
+
98
+ /** @private */
99
+ function mousemove() {
100
+ /* If the closest mark is far away, clear the current target. */
101
+ var point = search(this.scene, this.index);
102
+ if ((point.cost == Infinity) || (point.distance > r2)) point = null;
103
+
104
+ /* Unpoint the old target, if it's not the new target. */
105
+ if (unpoint) {
106
+ if (point
107
+ && (unpoint.scene == point.scene)
108
+ && (unpoint.index == point.index)) return;
109
+ pv.Mark.dispatch("unpoint", unpoint.scene, unpoint.index);
110
+ }
111
+
112
+ /* Point the new target, if there is one. */
113
+ if (unpoint = point) {
114
+ pv.Mark.dispatch("point", point.scene, point.index);
115
+
116
+ /* Unpoint when the mouse leaves the root panel. */
117
+ pv.listen(this.root.canvas(), "mouseout", mouseout);
118
+ }
119
+ }
120
+
121
+ /** @private */
122
+ function mouseout(e) {
123
+ if (unpoint && !pv.ancestor(this, e.relatedTarget)) {
124
+ pv.Mark.dispatch("unpoint", unpoint.scene, unpoint.index);
125
+ unpoint = null;
126
+ }
127
+ }
128
+
129
+ /**
130
+ * Sets or gets the collapse parameter. By default, the standard Cartesian
131
+ * distance is computed. However, with some visualizations it is desirable to
132
+ * consider only a single dimension, such as the <i>x</i>-dimension for an
133
+ * independent variable. In this case, the collapse parameter can be set to
134
+ * collapse the <i>y</i> dimension:
135
+ *
136
+ * <pre> .event("mousemove", pv.Behavior.point(Infinity).collapse("y"))</pre>
137
+ *
138
+ * @function
139
+ * @returns {pv.Behavior.point} this, or the current collapse parameter.
140
+ * @name pv.Behavior.point.prototype.collapse
141
+ * @param {string} [x] the new collapse parameter
142
+ */
143
+ mousemove.collapse = function(x) {
144
+ if (arguments.length) {
145
+ collapse = String(x);
146
+ switch (collapse) {
147
+ case "y": kx = 1; ky = 0; break;
148
+ case "x": kx = 0; ky = 1; break;
149
+ default: kx = 1; ky = 1; break;
150
+ }
151
+ return mousemove;
152
+ }
153
+ return collapse;
154
+ };
155
+
156
+ return mousemove;
157
+ };
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Returns a new resize behavior to be registered on mousedown events.
3
+ *
4
+ * @class Implements interactive resizing of a selection starting with mousedown
5
+ * events. Register this behavior on selection handles that should be resizeable
6
+ * by the user, such for brushing and linking. This behavior can be used in
7
+ * tandom with {@link pv.Behavior.select} and {@link pv.Behavior.drag} to allow
8
+ * the selected region to be selected and dragged interactively.
9
+ *
10
+ * <p>After the initial mousedown event is triggered, this behavior listens for
11
+ * mousemove and mouseup events on the window. This allows resizing to continue
12
+ * even if the mouse temporarily leaves the assigned panel, or even the root
13
+ * panel.
14
+ *
15
+ * <p>This behavior requires that the data associated with the mark being
16
+ * resized have <tt>x</tt>, <tt>y</tt>, <tt>dx</tt> and <tt>dy</tt> attributes
17
+ * that correspond to the mark's location and dimensions in pixels. The mark's
18
+ * positional properties are not set directly by this behavior; instead, the
19
+ * positional properties should be defined as:
20
+ *
21
+ * <pre> .left(function(d) d.x)
22
+ * .top(function(d) d.y)
23
+ * .width(function(d) d.dx)
24
+ * .height(function(d) d.dy)</pre>
25
+ *
26
+ * Thus, the behavior does not resize the mark directly, but instead updates the
27
+ * size by updating the assigned panel's underlying data. Note that if the
28
+ * positional properties are defined with bottom and right (rather than top and
29
+ * left), the resize behavior will be inverted, which will confuse users!
30
+ *
31
+ * <p>The resize behavior is bounded by the assigned mark's enclosing panel; the
32
+ * positional attributes are clamped such that the selection does not extend
33
+ * outside the panel's bounds.
34
+ *
35
+ * <p>The mark being resized is automatically re-rendered for each mouse event
36
+ * as part of the resize operation. This behavior may be enhanced in the future
37
+ * to allow more flexible configuration. In some cases, such as with parallel
38
+ * coordinates, resizing the selection may cause related marks to change, in
39
+ * which case additional marks may also need to be rendered. This can be
40
+ * accomplished by listening for the select psuedo-events:<ul>
41
+ *
42
+ * <li>resizestart (on mousedown)
43
+ * <li>resize (on mousemove)
44
+ * <li>resizeend (on mouseup)
45
+ *
46
+ * </ul>For example, to render the parent panel while resizing, thus
47
+ * re-rendering all sibling marks:
48
+ *
49
+ * <pre> .event("mousedown", pv.Behavior.resize("left"))
50
+ * .event("resize", function() this.parent)</pre>
51
+ *
52
+ * This behavior may be enhanced in the future to allow more flexible
53
+ * configuration of the selection behavior.
54
+ *
55
+ * @extends pv.Behavior
56
+ * @see pv.Behavior.select
57
+ * @see pv.Behavior.drag
58
+ */
59
+ pv.Behavior.resize = function(side) {
60
+ var scene, // scene context
61
+ index, // scene context
62
+ r, // region being selected
63
+ m1; // initial mouse position
64
+
65
+ /** @private */
66
+ function mousedown(d) {
67
+ index = this.index;
68
+ scene = this.scene;
69
+ m1 = this.mouse();
70
+ r = d;
71
+ switch (side) {
72
+ case "left": m1.x = r.x + r.dx; break;
73
+ case "right": m1.x = r.x; break;
74
+ case "top": m1.y = r.y + r.dy; break;
75
+ case "bottom": m1.y = r.y; break;
76
+ }
77
+ pv.Mark.dispatch("resizestart", scene, index);
78
+ }
79
+
80
+ /** @private */
81
+ function mousemove() {
82
+ if (!scene) return;
83
+ scene.mark.context(scene, index, function() {
84
+ var m2 = this.mouse();
85
+ r.x = Math.max(0, Math.min(m1.x, m2.x));
86
+ r.y = Math.max(0, Math.min(m1.y, m2.y));
87
+ r.dx = Math.min(this.parent.width(), Math.max(m2.x, m1.x)) - r.x;
88
+ r.dy = Math.min(this.parent.height(), Math.max(m2.y, m1.y)) - r.y;
89
+ this.render();
90
+ });
91
+ pv.Mark.dispatch("resize", scene, index);
92
+ }
93
+
94
+ /** @private */
95
+ function mouseup() {
96
+ if (!scene) return;
97
+ pv.Mark.dispatch("resizeend", scene, index);
98
+ scene = null;
99
+ }
100
+
101
+ pv.listen(window, "mousemove", mousemove);
102
+ pv.listen(window, "mouseup", mouseup);
103
+ return mousedown;
104
+ };
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Returns a new select behavior to be registered on mousedown events.
3
+ *
4
+ * @class Implements interactive selecting starting with mousedown events.
5
+ * Register this behavior on panels that should be selectable by the user, such
6
+ * for brushing and linking. This behavior can be used in tandom with
7
+ * {@link pv.Behavior.drag} to allow the selected region to be dragged
8
+ * interactively.
9
+ *
10
+ * <p>After the initial mousedown event is triggered, this behavior listens for
11
+ * mousemove and mouseup events on the window. This allows selecting to continue
12
+ * even if the mouse temporarily leaves the assigned panel, or even the root
13
+ * panel.
14
+ *
15
+ * <p>This behavior requires that the data associated with the mark being
16
+ * dragged have <tt>x</tt>, <tt>y</tt>, <tt>dx</tt> and <tt>dy</tt> attributes
17
+ * that correspond to the mark's location and dimensions in pixels. The mark's
18
+ * positional properties are not set directly by this behavior; instead, the
19
+ * positional properties should be defined as:
20
+ *
21
+ * <pre> .left(function(d) d.x)
22
+ * .top(function(d) d.y)
23
+ * .width(function(d) d.dx)
24
+ * .height(function(d) d.dy)</pre>
25
+ *
26
+ * Thus, the behavior does not resize the mark directly, but instead updates the
27
+ * selection by updating the assigned panel's underlying data. Note that if the
28
+ * positional properties are defined with bottom and right (rather than top and
29
+ * left), the drag behavior will be inverted, which will confuse users!
30
+ *
31
+ * <p>The select behavior is bounded by the assigned panel; the positional
32
+ * attributes are clamped such that the selection does not extend outside the
33
+ * panel's bounds.
34
+ *
35
+ * <p>The panel being selected is automatically re-rendered for each mouse event
36
+ * as part of the drag operation. This behavior may be enhanced in the future to
37
+ * allow more flexible configuration of select behavior. In some cases, such as
38
+ * with parallel coordinates, making a selection may cause related marks to
39
+ * change, in which case additional marks may also need to be rendered. This can
40
+ * be accomplished by listening for the select psuedo-events:<ul>
41
+ *
42
+ * <li>selectstart (on mousedown)
43
+ * <li>select (on mousemove)
44
+ * <li>selectend (on mouseup)
45
+ *
46
+ * </ul>For example, to render the parent panel while selecting, thus
47
+ * re-rendering all sibling marks:
48
+ *
49
+ * <pre> .event("mousedown", pv.Behavior.drag())
50
+ * .event("select", function() this.parent)</pre>
51
+ *
52
+ * This behavior may be enhanced in the future to allow more flexible
53
+ * configuration of the selection behavior.
54
+ *
55
+ * @extends pv.Behavior
56
+ * @see pv.Behavior.drag
57
+ */
58
+ pv.Behavior.select = function() {
59
+ var scene, // scene context
60
+ index, // scene context
61
+ r, // region being selected
62
+ m1; // initial mouse position
63
+
64
+ /** @private */
65
+ function mousedown(d) {
66
+ index = this.index;
67
+ scene = this.scene;
68
+ m1 = this.mouse();
69
+ r = d;
70
+ r.x = m1.x;
71
+ r.y = m1.y;
72
+ r.dx = r.dy = 0;
73
+ pv.Mark.dispatch("selectstart", scene, index);
74
+ }
75
+
76
+ /** @private */
77
+ function mousemove() {
78
+ if (!scene) return;
79
+ scene.mark.context(scene, index, function() {
80
+ var m2 = this.mouse();
81
+ r.x = Math.max(0, Math.min(m1.x, m2.x));
82
+ r.y = Math.max(0, Math.min(m1.y, m2.y));
83
+ r.dx = Math.min(this.width(), Math.max(m2.x, m1.x)) - r.x;
84
+ r.dy = Math.min(this.height(), Math.max(m2.y, m1.y)) - r.y;
85
+ this.render();
86
+ });
87
+ pv.Mark.dispatch("select", scene, index);
88
+ }
89
+
90
+ /** @private */
91
+ function mouseup() {
92
+ if (!scene) return;
93
+ pv.Mark.dispatch("selectend", scene, index);
94
+ scene = null;
95
+ }
96
+
97
+ pv.listen(window, "mousemove", mousemove);
98
+ pv.listen(window, "mouseup", mouseup);
99
+ return mousedown;
100
+ };
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Returns a new zoom behavior to be registered on mousewheel events.
3
+ *
4
+ * @class Implements interactive zooming using mousewheel events. Register this
5
+ * behavior on panels to allow zooming. This behavior can be used in tandem with
6
+ * {@link pv.Behavior.pan} to allow both panning and zooming:
7
+ *
8
+ * <pre> .event("mousedown", pv.Behavior.pan())
9
+ * .event("mousewheel", pv.Behavior.zoom())</pre>
10
+ *
11
+ * The zoom behavior currently supports only mousewheel events; support for
12
+ * keyboard shortcuts and gesture events to improve accessibility may be added
13
+ * in the future.
14
+ *
15
+ * <p>The implementation of this behavior relies on the panel's
16
+ * <tt>transform</tt> property, which specifies a matrix transformation that is
17
+ * applied to child marks. Note that the transform property only affects the
18
+ * panel's children, but not the panel itself; therefore the panel's fill and
19
+ * stroke will not change when the contents are zoomed. The built-in support for
20
+ * transforms only supports uniform scaling and translates, which is sufficient
21
+ * for panning and zooming. Note that this is not a strict geometric
22
+ * transformation, as the <tt>lineWidth</tt> property is scale-aware: strokes
23
+ * are drawn at constant size independent of scale.
24
+ *
25
+ * <p>Panels have transparent fill styles by default; this means that panels may
26
+ * not receive mousewheel events to zoom. To fix this problem, either given the
27
+ * panel a visible fill style (such as "white"), or set the <tt>events</tt>
28
+ * property to "all" such that the panel receives events despite its transparent
29
+ * fill.
30
+ *
31
+ * <p>The zoom behavior has optional support for bounding. If enabled, the user
32
+ * will not be able to zoom out farther than the initial bounds. This feature is
33
+ * designed to work in conjunction with the pan behavior.
34
+ *
35
+ * @extends pv.Behavior
36
+ * @see pv.Panel#transform
37
+ * @see pv.Mark#scale
38
+ * @param {number} speed
39
+ */
40
+ pv.Behavior.zoom = function(speed) {
41
+ var bound; // whether to bound to the panel
42
+
43
+ if (!arguments.length) speed = 1 / 48;
44
+
45
+ /** @private */
46
+ function mousewheel() {
47
+ var v = this.mouse(),
48
+ k = pv.event.wheel * speed,
49
+ m = this.transform().translate(v.x, v.y)
50
+ .scale((k < 0) ? (1e3 / (1e3 - k)) : ((1e3 + k) / 1e3))
51
+ .translate(-v.x, -v.y);
52
+ if (bound) {
53
+ m.k = Math.max(1, m.k);
54
+ m.x = Math.max((1 - m.k) * this.width(), Math.min(0, m.x));
55
+ m.y = Math.max((1 - m.k) * this.height(), Math.min(0, m.y));
56
+ }
57
+ this.transform(m).render();
58
+ pv.Mark.dispatch("zoom", this.scene, this.index);
59
+ }
60
+
61
+ /**
62
+ * Sets or gets the bound parameter. If bounding is enabled, the user will not
63
+ * be able to zoom out farther than the initial panel bounds. Bounding is not
64
+ * enabled by default. If this behavior is used in tandem with the pan
65
+ * behavior, both should use the same bound parameter.
66
+ *
67
+ * <p>Note: enabling bounding after zooming has already occurred will not
68
+ * immediately reset the transform. Bounding should be enabled before the zoom
69
+ * behavior is applied.
70
+ *
71
+ * @function
72
+ * @returns {pv.Behavior.zoom} this, or the current bound parameter.
73
+ * @name pv.Behavior.zoom.prototype.bound
74
+ * @param {boolean} [x] the new bound parameter.
75
+ */
76
+ mousewheel.bound = function(x) {
77
+ if (arguments.length) {
78
+ bound = Boolean(x);
79
+ return this;
80
+ }
81
+ return Boolean(bound);
82
+ };
83
+
84
+ return mousewheel;
85
+ };