rubyvis 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/History.txt +8 -1
- data/Manifest.txt +100 -416
- data/README.txt +5 -2
- data/examples/barley/barley.rb +79 -0
- data/examples/crimea/crimea.rb +37 -0
- data/examples/crimea/crimea_line.rb +47 -0
- data/examples/second.rb +2 -2
- data/examples/third.rb +16 -0
- data/lib/rubyvis.rb +2 -1
- data/lib/rubyvis/color/color.rb +170 -169
- data/lib/rubyvis/color/colors.rb +4 -4
- data/lib/rubyvis/color/ramp.rb +1 -0
- data/lib/rubyvis/format.rb +2 -2
- data/lib/rubyvis/format/date.rb +9 -2
- data/lib/rubyvis/format/number.rb +3 -3
- data/lib/rubyvis/internals.rb +13 -13
- data/lib/rubyvis/javascript_behaviour.rb +3 -3
- data/lib/rubyvis/label.rb +1 -0
- data/lib/rubyvis/mark.rb +178 -169
- data/lib/rubyvis/mark/anchor.rb +4 -4
- data/lib/rubyvis/mark/area.rb +93 -5
- data/lib/rubyvis/mark/bar.rb +1 -1
- data/lib/rubyvis/mark/label.rb +2 -2
- data/lib/rubyvis/mark/line.rb +11 -5
- data/lib/rubyvis/mark/panel.rb +13 -11
- data/lib/rubyvis/mark/rule.rb +2 -2
- data/lib/rubyvis/property.rb +3 -2
- data/lib/rubyvis/scale.rb +4 -4
- data/lib/rubyvis/scale/linear.rb +2 -2
- data/lib/rubyvis/scale/ordinal.rb +41 -41
- data/lib/rubyvis/scale/quantitative.rb +212 -200
- data/lib/rubyvis/scene/svg_bar.rb +21 -21
- data/lib/rubyvis/scene/svg_label.rb +34 -34
- data/lib/rubyvis/scene/svg_line.rb +185 -0
- data/lib/rubyvis/scene/svg_panel.rb +36 -30
- data/lib/rubyvis/scene/svg_rule.rb +18 -19
- data/lib/rubyvis/scene/svg_scene.rb +33 -30
- data/lib/rubyvis/sceneelement.rb +5 -1
- data/lib/rubyvis/transform.rb +2 -2
- data/spec/mark_spec.rb +6 -6
- data/spec/scale_linear_datetime_spec.rb +52 -0
- data/spec/scale_linear_spec.rb +0 -10
- data/vendor/{protovis-r3.3.js → protovis/protovis-r3.3.js} +0 -0
- data/vendor/{src → protovis/src}/behavior/Behavior.js +0 -0
- data/vendor/{src → protovis/src}/behavior/Drag.js +0 -0
- data/vendor/{src → protovis/src}/behavior/Pan.js +0 -0
- data/vendor/{src → protovis/src}/behavior/Point.js +0 -0
- data/vendor/{src → protovis/src}/behavior/Resize.js +0 -0
- data/vendor/{src → protovis/src}/behavior/Select.js +0 -0
- data/vendor/{src → protovis/src}/behavior/Zoom.js +0 -0
- data/vendor/{src → protovis/src}/color/Color.js +0 -0
- data/vendor/{src → protovis/src}/color/Colors.js +0 -0
- data/vendor/{src → protovis/src}/color/Ramp.js +0 -0
- data/vendor/{src → protovis/src}/data/Arrays.js +0 -0
- data/vendor/{src → protovis/src}/data/Dom.js +0 -0
- data/vendor/{src → protovis/src}/data/Flatten.js +0 -0
- data/vendor/{src → protovis/src}/data/Histogram.js +0 -0
- data/vendor/{src → protovis/src}/data/LinearScale.js +0 -0
- data/vendor/{src → protovis/src}/data/LogScale.js +0 -0
- data/vendor/{src → protovis/src}/data/Nest.js +0 -0
- data/vendor/{src → protovis/src}/data/Numbers.js +0 -0
- data/vendor/{src → protovis/src}/data/Objects.js +0 -0
- data/vendor/{src → protovis/src}/data/OrdinalScale.js +0 -0
- data/vendor/{src → protovis/src}/data/QuantileScale.js +0 -0
- data/vendor/{src → protovis/src}/data/QuantitativeScale.js +0 -0
- data/vendor/{src → protovis/src}/data/RootScale.js +0 -0
- data/vendor/{src → protovis/src}/data/Scale.js +0 -0
- data/vendor/{src → protovis/src}/data/Transform.js +0 -0
- data/vendor/{src → protovis/src}/data/Tree.js +0 -0
- data/vendor/{src → protovis/src}/data/Vector.js +0 -0
- data/vendor/{src → protovis/src}/geo/Geo.js +0 -0
- data/vendor/{src → protovis/src}/geo/GeoScale.js +0 -0
- data/vendor/{src → protovis/src}/geo/LatLng.js +0 -0
- data/vendor/{src → protovis/src}/geo/Projection.js +0 -0
- data/vendor/{src → protovis/src}/geo/Projections.js +0 -0
- data/vendor/{src → protovis/src}/lang/Array.js +0 -0
- data/vendor/{src → protovis/src}/lang/init.js +0 -0
- data/vendor/{src → protovis/src}/layout/Arc.js +0 -0
- data/vendor/{src → protovis/src}/layout/Bullet.js +0 -0
- data/vendor/{src → protovis/src}/layout/Cluster.js +0 -0
- data/vendor/{src → protovis/src}/layout/Force.js +0 -0
- data/vendor/{src → protovis/src}/layout/Grid.js +0 -0
- data/vendor/{src → protovis/src}/layout/Hierarchy.js +0 -0
- data/vendor/{src → protovis/src}/layout/Horizon.js +0 -0
- data/vendor/{src → protovis/src}/layout/Indent.js +0 -0
- data/vendor/{src → protovis/src}/layout/Layout.js +0 -0
- data/vendor/{src → protovis/src}/layout/Matrix.js +0 -0
- data/vendor/{src → protovis/src}/layout/Network.js +0 -0
- data/vendor/{src → protovis/src}/layout/Pack.js +0 -0
- data/vendor/{src → protovis/src}/layout/Partition.js +0 -0
- data/vendor/{src → protovis/src}/layout/Rollup.js +0 -0
- data/vendor/{src → protovis/src}/layout/Stack.js +0 -0
- data/vendor/{src → protovis/src}/layout/Tree.js +0 -0
- data/vendor/{src → protovis/src}/layout/Treemap.js +0 -0
- data/vendor/{src → protovis/src}/mark/Anchor.js +0 -0
- data/vendor/{src → protovis/src}/mark/Area.js +0 -0
- data/vendor/{src → protovis/src}/mark/Bar.js +0 -0
- data/vendor/{src → protovis/src}/mark/Dot.js +0 -0
- data/vendor/{src → protovis/src}/mark/Ease.js +0 -0
- data/vendor/{src → protovis/src}/mark/Image.js +0 -0
- data/vendor/{src → protovis/src}/mark/Label.js +0 -0
- data/vendor/{src → protovis/src}/mark/Line.js +0 -0
- data/vendor/{src → protovis/src}/mark/Mark.js +0 -0
- data/vendor/{src → protovis/src}/mark/Panel.js +0 -0
- data/vendor/{src → protovis/src}/mark/Rule.js +0 -0
- data/vendor/{src → protovis/src}/mark/Transient.js +0 -0
- data/vendor/{src → protovis/src}/mark/Transition.js +0 -0
- data/vendor/{src → protovis/src}/mark/Wedge.js +0 -0
- data/vendor/{src → protovis/src}/physics/BoundConstraint.js +0 -0
- data/vendor/{src → protovis/src}/physics/ChargeForce.js +0 -0
- data/vendor/{src → protovis/src}/physics/CollisionConstraint.js +0 -0
- data/vendor/{src → protovis/src}/physics/Constraint.js +0 -0
- data/vendor/{src → protovis/src}/physics/DragForce.js +0 -0
- data/vendor/{src → protovis/src}/physics/Force.js +0 -0
- data/vendor/{src → protovis/src}/physics/Particle.js +0 -0
- data/vendor/{src → protovis/src}/physics/PositionConstraint.js +0 -0
- data/vendor/{src → protovis/src}/physics/Quadtree.js +0 -0
- data/vendor/{src → protovis/src}/physics/Simulation.js +0 -0
- data/vendor/{src → protovis/src}/physics/SpringForce.js +0 -0
- data/vendor/{src → protovis/src}/pv-internals.js +0 -0
- data/vendor/{src → protovis/src}/pv.js +0 -0
- data/vendor/{src → protovis/src}/scene/SvgArea.js +0 -0
- data/vendor/{src → protovis/src}/scene/SvgBar.js +0 -0
- data/vendor/{src → protovis/src}/scene/SvgCurve.js +0 -0
- data/vendor/{src → protovis/src}/scene/SvgDot.js +0 -0
- data/vendor/{src → protovis/src}/scene/SvgImage.js +0 -0
- data/vendor/{src → protovis/src}/scene/SvgLabel.js +0 -0
- data/vendor/{src → protovis/src}/scene/SvgLine.js +0 -0
- data/vendor/{src → protovis/src}/scene/SvgPanel.js +0 -0
- data/vendor/{src → protovis/src}/scene/SvgRule.js +0 -0
- data/vendor/{src → protovis/src}/scene/SvgScene.js +0 -0
- data/vendor/{src → protovis/src}/scene/SvgWedge.js +0 -0
- data/vendor/{src → protovis/src}/text/DateFormat.js +0 -0
- data/vendor/{src → protovis/src}/text/Format.js +0 -0
- data/vendor/{src → protovis/src}/text/NumberFormat.js +0 -0
- data/vendor/{src → protovis/src}/text/TimeFormat.js +0 -0
- metadata +132 -426
- metadata.gz.sig +2 -0
- data/examples/crimea-line.rb +0 -64
- data/vendor/FUTURE +0 -62
- data/vendor/Makefile +0 -138
- data/vendor/TODO +0 -22
- data/vendor/examples/antibiotics/antibiotics-scatter.html +0 -113
- data/vendor/examples/antibiotics/antibiotics.html +0 -140
- data/vendor/examples/antibiotics/antibiotics.js +0 -20
- data/vendor/examples/barley/barley.html +0 -102
- data/vendor/examples/barley/barley.js +0 -122
- data/vendor/examples/cars/cars.html +0 -90
- data/vendor/examples/cars/cars.js +0 -408
- data/vendor/examples/clock/clock.html +0 -91
- data/vendor/examples/crimea/crimea-grouped-bar.html +0 -65
- data/vendor/examples/crimea/crimea-line.html +0 -61
- data/vendor/examples/crimea/crimea-stacked-area.html +0 -61
- data/vendor/examples/crimea/crimea-stacked-bar.html +0 -60
- data/vendor/examples/crimea/crimea.html +0 -100
- data/vendor/examples/crimea/crimea.js +0 -33
- data/vendor/examples/downloadify/LICENSE.txt +0 -22
- data/vendor/examples/downloadify/download.png +0 -0
- data/vendor/examples/downloadify/downloadify.html +0 -57
- data/vendor/examples/downloadify/downloadify.min.js +0 -3
- data/vendor/examples/downloadify/downloadify.swf +0 -0
- data/vendor/examples/downloadify/swfobject.js +0 -4
- data/vendor/examples/ex.css +0 -17
- data/vendor/examples/eyes/eyes.html +0 -53
- data/vendor/examples/eyes/matrix.html +0 -44
- data/vendor/examples/flowers/flowers.html +0 -109
- data/vendor/examples/flowers/flowers.js +0 -154
- data/vendor/examples/group-stack/group-stack.html +0 -79
- data/vendor/examples/group-stack/headcount.js +0 -23
- data/vendor/examples/hotel/hotel.html +0 -76
- data/vendor/examples/hotel/hotel.js +0 -245
- data/vendor/examples/jobs/jobs.html +0 -71
- data/vendor/examples/jobs/jobs.js +0 -1024
- data/vendor/examples/jquery-1.4.2.min.js +0 -154
- data/vendor/examples/nba/nba.html +0 -83
- data/vendor/examples/nba/nba.js +0 -53
- data/vendor/examples/nba/nba2.html +0 -82
- data/vendor/examples/sankey/gdp2009.js +0 -184
- data/vendor/examples/sankey/sankey.html +0 -77
- data/vendor/examples/slider/cell.html +0 -112
- data/vendor/examples/slider/cell.js +0 -31
- data/vendor/examples/slider/horizon.html +0 -85
- data/vendor/examples/slider/jquery-ui-1.8rc3.custom.min.js +0 -71
- data/vendor/examples/slider/slider.html +0 -50
- data/vendor/examples/slider/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- data/vendor/examples/slider/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- data/vendor/examples/slider/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
- data/vendor/examples/slider/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- data/vendor/examples/slider/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- data/vendor/examples/slider/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/vendor/examples/slider/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- data/vendor/examples/slider/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- data/vendor/examples/slider/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- data/vendor/examples/slider/ui-lightness/images/ui-icons_222222_256x240.png +0 -2
- data/vendor/examples/slider/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -2
- data/vendor/examples/slider/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -2
- data/vendor/examples/slider/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -2
- data/vendor/examples/slider/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -2
- data/vendor/examples/slider/ui-lightness/jquery-ui-1.8rc3.custom.css +0 -302
- data/vendor/examples/tipsy/jquery.tipsy.js +0 -198
- data/vendor/examples/tipsy/tipsy-bar.html +0 -65
- data/vendor/examples/tipsy/tipsy-line.html +0 -67
- data/vendor/examples/tipsy/tipsy.css +0 -12
- data/vendor/examples/tipsy/tipsy.gif +0 -0
- data/vendor/examples/tipsy/tipsy.js +0 -66
- data/vendor/examples/weather/weather.html +0 -86
- data/vendor/examples/weather/weather.js +0 -42
- data/vendor/examples/wheat/wheat.html +0 -130
- data/vendor/examples/wheat/wheat.js +0 -70
- data/vendor/lib/google-compiler/COPYING +0 -202
- data/vendor/lib/google-compiler/README +0 -224
- data/vendor/lib/google-compiler/compiler-20100201.jar +0 -0
- data/vendor/protovis-d3.3.js +0 -15726
- data/vendor/test1.html +0 -30
- data/vendor/tests/behavior/drag-events.html +0 -47
- data/vendor/tests/behavior/drag.html +0 -32
- data/vendor/tests/behavior/drag2.html +0 -33
- data/vendor/tests/behavior/point-area-stacked.html +0 -73
- data/vendor/tests/behavior/point-area-stacked2.html +0 -70
- data/vendor/tests/behavior/point-area.html +0 -67
- data/vendor/tests/behavior/point-bar.html +0 -62
- data/vendor/tests/behavior/point-dot.html +0 -60
- data/vendor/tests/behavior/point-line.html +0 -62
- data/vendor/tests/behavior/point-lines-grid.html +0 -65
- data/vendor/tests/behavior/point-lines.html +0 -61
- data/vendor/tests/behavior/point-wedge.html +0 -43
- data/vendor/tests/behavior/resize.html +0 -69
- data/vendor/tests/behavior/select.html +0 -37
- data/vendor/tests/bzr.js +0 -62
- data/vendor/tests/center.js +0 -13
- data/vendor/tests/data/deviation.html +0 -54
- data/vendor/tests/data/histogram-discrete.html +0 -50
- data/vendor/tests/data/histogram.html +0 -56
- data/vendor/tests/data/log-adjusted.html +0 -48
- data/vendor/tests/data/log-ceil.html +0 -48
- data/vendor/tests/data/log-floor.html +0 -48
- data/vendor/tests/data/log-symmetric.html +0 -48
- data/vendor/tests/data/log.html +0 -48
- data/vendor/tests/data/max-index.html +0 -36
- data/vendor/tests/data/max.html +0 -36
- data/vendor/tests/data/min-index.html +0 -36
- data/vendor/tests/data/min.html +0 -36
- data/vendor/tests/data/ordinal-split-banded.html +0 -45
- data/vendor/tests/data/ordinal-split-banded2.html +0 -45
- data/vendor/tests/data/ordinal-split-flush.html +0 -51
- data/vendor/tests/data/ordinal-split.html +0 -51
- data/vendor/tests/data/range.html +0 -105
- data/vendor/tests/data/scale-date.html +0 -46
- data/vendor/tests/data/scale-date2.html +0 -38
- data/vendor/tests/data/scale-date3.html +0 -38
- data/vendor/tests/data/scale-date4.html +0 -38
- data/vendor/tests/data/scale-degenerate.html +0 -143
- data/vendor/tests/data/scale-linear.html +0 -59
- data/vendor/tests/data/scale-log.html +0 -60
- data/vendor/tests/data/scale-log2.html +0 -60
- data/vendor/tests/data/scale-log3.html +0 -60
- data/vendor/tests/data/scale-log4.html +0 -60
- data/vendor/tests/data/scale-log5.html +0 -60
- data/vendor/tests/data/scale-log6.html +0 -60
- data/vendor/tests/data/scale-quantile.html +0 -47
- data/vendor/tests/data/scale-quantile2.html +0 -50
- data/vendor/tests/data/scale-quantile3.html +0 -48
- data/vendor/tests/data/scale-root.html +0 -60
- data/vendor/tests/data/scale-root2.html +0 -39
- data/vendor/tests/data/scale-tick-format.html +0 -54
- data/vendor/tests/data/scale-ticks.html +0 -45
- data/vendor/tests/data/sum.html +0 -42
- data/vendor/tests/data/variance.html +0 -42
- data/vendor/tests/diamond.js +0 -40
- data/vendor/tests/flare-imports.js +0 -222
- data/vendor/tests/flare.js +0 -284
- data/vendor/tests/geo/countries-hires.js +0 -257
- data/vendor/tests/geo/countries-lores.js +0 -197
- data/vendor/tests/geo/population.js +0 -250
- data/vendor/tests/geo/scale-aitoff.html +0 -58
- data/vendor/tests/geo/scale-gall-peters.html +0 -56
- data/vendor/tests/geo/scale-hammer.html +0 -58
- data/vendor/tests/geo/scale-identity.html +0 -56
- data/vendor/tests/geo/scale-mercator.html +0 -56
- data/vendor/tests/geo/scale-sinusoidal.html +0 -57
- data/vendor/tests/geo/scale-smart-domain.html +0 -58
- data/vendor/tests/geo/scale.html +0 -55
- data/vendor/tests/geo/scale2.html +0 -40
- data/vendor/tests/geo/us-states.js +0 -61
- data/vendor/tests/heatmap.js +0 -63
- data/vendor/tests/lang/globals.html +0 -41
- data/vendor/tests/lang/init.html +0 -31
- data/vendor/tests/layers.js +0 -28
- data/vendor/tests/layout/arc-directed.html +0 -33
- data/vendor/tests/layout/arc-radial.html +0 -36
- data/vendor/tests/layout/arc-undirected.html +0 -32
- data/vendor/tests/layout/arc.html +0 -33
- data/vendor/tests/layout/arc2.html +0 -32
- data/vendor/tests/layout/bullet-multiples.html +0 -60
- data/vendor/tests/layout/bullet.html +0 -45
- data/vendor/tests/layout/bullets.js +0 -37
- data/vendor/tests/layout/cluster-fill-group.html +0 -24
- data/vendor/tests/layout/cluster-fill.html +0 -28
- data/vendor/tests/layout/cluster-partition-radial-fill.html +0 -43
- data/vendor/tests/layout/cluster-radial-fill-radius.html +0 -26
- data/vendor/tests/layout/cluster-radial-fill.html +0 -29
- data/vendor/tests/layout/cluster-radial-group-fill.html +0 -30
- data/vendor/tests/layout/cluster-radial-radius.html +0 -30
- data/vendor/tests/layout/cluster-radial.html +0 -28
- data/vendor/tests/layout/cluster-radial2.html +0 -33
- data/vendor/tests/layout/cluster.html +0 -34
- data/vendor/tests/layout/cluster2.html +0 -32
- data/vendor/tests/layout/force-toggle.html +0 -46
- data/vendor/tests/layout/force.html +0 -45
- data/vendor/tests/layout/force2.html +0 -58
- data/vendor/tests/layout/force3.html +0 -41
- data/vendor/tests/layout/force4.html +0 -45
- data/vendor/tests/layout/force5.html +0 -53
- data/vendor/tests/layout/grid-cols.html +0 -31
- data/vendor/tests/layout/grid-heatmap.html +0 -25
- data/vendor/tests/layout/grid-rows.html +0 -31
- data/vendor/tests/layout/grid.html +0 -34
- data/vendor/tests/layout/horizon-color.html +0 -31
- data/vendor/tests/layout/horizon.html +0 -31
- data/vendor/tests/layout/indent-toggle.html +0 -62
- data/vendor/tests/layout/indent.html +0 -25
- data/vendor/tests/layout/indent2.html +0 -33
- data/vendor/tests/layout/matrix-sort.html +0 -28
- data/vendor/tests/layout/matrix.html +0 -35
- data/vendor/tests/layout/network.html +0 -43
- data/vendor/tests/layout/pack-bubble.html +0 -45
- data/vendor/tests/layout/pack.html +0 -26
- data/vendor/tests/layout/pack2.html +0 -32
- data/vendor/tests/layout/partition-fill.html +0 -27
- data/vendor/tests/layout/partition-fill2.html +0 -22
- data/vendor/tests/layout/partition-fill3.html +0 -27
- data/vendor/tests/layout/partition-radial-fill-radius.html +0 -25
- data/vendor/tests/layout/partition-radial-fill.html +0 -26
- data/vendor/tests/layout/partition-radial-fill2.html +0 -23
- data/vendor/tests/layout/partition-radial-fill3.html +0 -29
- data/vendor/tests/layout/partition-radial-radius.html +0 -29
- data/vendor/tests/layout/partition-radial.html +0 -30
- data/vendor/tests/layout/partition-radial2.html +0 -33
- data/vendor/tests/layout/partition.html +0 -33
- data/vendor/tests/layout/partition2.html +0 -32
- data/vendor/tests/layout/rollup.html +0 -50
- data/vendor/tests/layout/stack-empty.html +0 -27
- data/vendor/tests/layout/stack-expand.html +0 -41
- data/vendor/tests/layout/stack-reverse.html +0 -42
- data/vendor/tests/layout/stack-right.html +0 -42
- data/vendor/tests/layout/stack-rule.html +0 -61
- data/vendor/tests/layout/stack-visible.html +0 -43
- data/vendor/tests/layout/stack.html +0 -53
- data/vendor/tests/layout/tree-radial.html +0 -31
- data/vendor/tests/layout/tree-radial2.html +0 -34
- data/vendor/tests/layout/tree-toggle.html +0 -36
- data/vendor/tests/layout/tree.html +0 -31
- data/vendor/tests/layout/tree2.html +0 -35
- data/vendor/tests/layout/treemap-hierarchy.html +0 -40
- data/vendor/tests/layout/treemap-margin.html +0 -26
- data/vendor/tests/layout/treemap-round.html +0 -40
- data/vendor/tests/layout/treemap-slice.html +0 -34
- data/vendor/tests/layout/treemap.html +0 -37
- data/vendor/tests/life.js +0 -212
- data/vendor/tests/mark/anchor.html +0 -25
- data/vendor/tests/mark/area-anchor-chain.html +0 -42
- data/vendor/tests/mark/area-anchor-line.html +0 -57
- data/vendor/tests/mark/area-anchor-stack.html +0 -35
- data/vendor/tests/mark/area-anchor.html +0 -43
- data/vendor/tests/mark/area-anchor2.html +0 -33
- data/vendor/tests/mark/area-cardinal.html +0 -57
- data/vendor/tests/mark/area-monotone.html +0 -57
- data/vendor/tests/mark/area-segmented-basis.html +0 -30
- data/vendor/tests/mark/area-segmented-cardinal.html +0 -30
- data/vendor/tests/mark/area-segmented-monotone.html +0 -30
- data/vendor/tests/mark/area-segmented-step.html +0 -44
- data/vendor/tests/mark/area-segmented.html +0 -29
- data/vendor/tests/mark/area-stacked-cardinal.html +0 -54
- data/vendor/tests/mark/area-stacked-monotone.html +0 -54
- data/vendor/tests/mark/area-stacked.html +0 -53
- data/vendor/tests/mark/area-step.html +0 -43
- data/vendor/tests/mark/area-zero.html +0 -32
- data/vendor/tests/mark/area.html +0 -57
- data/vendor/tests/mark/bar-anchor-stack.html +0 -51
- data/vendor/tests/mark/bar-anchor.html +0 -44
- data/vendor/tests/mark/bar-column-grouped.html +0 -63
- data/vendor/tests/mark/bar-column-stacked.html +0 -56
- data/vendor/tests/mark/bar-column.html +0 -54
- data/vendor/tests/mark/bar-grouped.html +0 -63
- data/vendor/tests/mark/bar-stacked.html +0 -57
- data/vendor/tests/mark/bar.html +0 -54
- data/vendor/tests/mark/cursor.html +0 -41
- data/vendor/tests/mark/def-type.html +0 -23
- data/vendor/tests/mark/dot-anchor.html +0 -33
- data/vendor/tests/mark/dot-radius.html +0 -22
- data/vendor/tests/mark/dot-stroke.html +0 -43
- data/vendor/tests/mark/dot.html +0 -52
- data/vendor/tests/mark/dot2.html +0 -61
- data/vendor/tests/mark/ease.html +0 -90
- data/vendor/tests/mark/event-dblclick.html +0 -30
- data/vendor/tests/mark/event-prototype.html +0 -45
- data/vendor/tests/mark/event-render.html +0 -45
- data/vendor/tests/mark/event.html +0 -24
- data/vendor/tests/mark/image-color-inherit.html +0 -33
- data/vendor/tests/mark/image-color.html +0 -35
- data/vendor/tests/mark/image-color2.html +0 -35
- data/vendor/tests/mark/image-heatmap.html +0 -29
- data/vendor/tests/mark/image.html +0 -32
- data/vendor/tests/mark/label-break.html +0 -54
- data/vendor/tests/mark/label-decoration.html +0 -22
- data/vendor/tests/mark/label-events.html +0 -32
- data/vendor/tests/mark/line-anchor.html +0 -42
- data/vendor/tests/mark/line-basis.html +0 -54
- data/vendor/tests/mark/line-brownian.html +0 -57
- data/vendor/tests/mark/line-cardinal.html +0 -77
- data/vendor/tests/mark/line-catmull-rom.html +0 -78
- data/vendor/tests/mark/line-curve.html +0 -65
- data/vendor/tests/mark/line-eccentricity.html +0 -39
- data/vendor/tests/mark/line-fill.html +0 -24
- data/vendor/tests/mark/line-join.html +0 -51
- data/vendor/tests/mark/line-monotone-non-monotone.html +0 -53
- data/vendor/tests/mark/line-monotone-two-way.html +0 -61
- data/vendor/tests/mark/line-monotone.html +0 -53
- data/vendor/tests/mark/line-polar.html +0 -36
- data/vendor/tests/mark/line-segmented-basis.html +0 -57
- data/vendor/tests/mark/line-segmented-cardinal.html +0 -80
- data/vendor/tests/mark/line-segmented-join.html +0 -52
- data/vendor/tests/mark/line-segmented-monotone.html +0 -56
- data/vendor/tests/mark/line-segmented-polar.html +0 -30
- data/vendor/tests/mark/line-segmented-step.html +0 -41
- data/vendor/tests/mark/line-segmented-step2.html +0 -32
- data/vendor/tests/mark/line-segmented.html +0 -30
- data/vendor/tests/mark/line-step.html +0 -39
- data/vendor/tests/mark/line-tension.html +0 -59
- data/vendor/tests/mark/line.html +0 -51
- data/vendor/tests/mark/panel-anchor.html +0 -37
- data/vendor/tests/mark/panel-anchor2.html +0 -31
- data/vendor/tests/mark/panel-anchor3.html +0 -22
- data/vendor/tests/mark/panel-anchor4.html +0 -28
- data/vendor/tests/mark/panel-anchor5.html +0 -28
- data/vendor/tests/mark/panel-append.html +0 -29
- data/vendor/tests/mark/panel-canvas.html +0 -107
- data/vendor/tests/mark/panel-fill.html +0 -50
- data/vendor/tests/mark/panel-mouse.html +0 -53
- data/vendor/tests/mark/panel-transform.html +0 -67
- data/vendor/tests/mark/property-cast.html +0 -24
- data/vendor/tests/mark/render-partial.html +0 -42
- data/vendor/tests/mark/rule-anchor.html +0 -29
- data/vendor/tests/mark/title.html +0 -41
- data/vendor/tests/mark/transition-anchor.html +0 -47
- data/vendor/tests/mark/transition-wedge.html +0 -47
- data/vendor/tests/mark/transition.html +0 -106
- data/vendor/tests/mark/wedge-donut.html +0 -35
- data/vendor/tests/mark/wedge-implied.html +0 -42
- data/vendor/tests/mark/wedge-pie.html +0 -37
- data/vendor/tests/mark/wedge-ring.html +0 -27
- data/vendor/tests/miserables.js +0 -348
- data/vendor/tests/physics/dorling.html +0 -70
- data/vendor/tests/physics/simulation.html +0 -56
- data/vendor/tests/social.js +0 -28
- data/vendor/tests/stanford.png +0 -0
- data/vendor/tests/style.css +0 -5
- data/vendor/tests/testify.css +0 -29
- data/vendor/tests/testify.js +0 -16
- data/vendor/tests/text/format-number.html +0 -75
data/lib/rubyvis/mark/anchor.rb
CHANGED
@@ -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
|
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
|
data/lib/rubyvis/mark/area.rb
CHANGED
@@ -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
|
-
|
9
|
-
|
89
|
+
anchor=mark_anchor(name)
|
90
|
+
anchor.interpolate(lambda {
|
91
|
+
self.scene.target[self.index].interpolate
|
10
92
|
}).eccentricity(lambda {
|
11
|
-
|
93
|
+
self.scene.target[self.index].eccentricity
|
12
94
|
}).tension(lambda {
|
13
|
-
|
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
|
data/lib/rubyvis/mark/bar.rb
CHANGED
data/lib/rubyvis/mark/label.rb
CHANGED
@@ -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
|
data/lib/rubyvis/mark/line.rb
CHANGED
@@ -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
|
-
|
9
|
+
{'left'=>'right','bottom'=>'center', 'top'=>'center','center'=>'center','right'=>'left'}[d]
|
10
10
|
}).text_baseline(lambda{|d|
|
11
|
-
|
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, :
|
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
|
data/lib/rubyvis/mark/panel.rb
CHANGED
@@ -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
|
data/lib/rubyvis/mark/rule.rb
CHANGED
data/lib/rubyvis/property.rb
CHANGED
@@ -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
|
-
|
26
|
-
|
27
|
-
|
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
|
data/lib/rubyvis/scale/linear.rb
CHANGED
@@ -1,52 +1,52 @@
|
|
1
1
|
module Rubyvis
|
2
2
|
class Scale::Ordinal
|
3
3
|
include Rubyvis::Scale
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
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
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
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
|
-
|
30
|
-
|
31
|
-
|
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
|
-
|
34
|
-
|
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
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
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
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
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
|
-
|
64
|
+
|
65
|
+
@type = (o.is_a? Time) ? :time : :number;
|
66
|
+
return self
|
38
67
|
end
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
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
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
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
|
-
|
92
|
-
|
93
|
-
|
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
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
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
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
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
|
-
|
122
|
+
ar[4]=1
|
133
123
|
when 2592e6
|
134
|
-
|
124
|
+
ar[3]=1
|
135
125
|
when 6048e5
|
136
|
-
if (
|
137
|
-
d.setDate(d.getDate() - d.getDay());
|
138
|
-
end
|
126
|
+
ar[3]=ar[3]-ar[6] if (prec == 6048e5)
|
139
127
|
when 864e5
|
140
|
-
|
128
|
+
ar[2]=0
|
141
129
|
when 36e5
|
142
|
-
|
130
|
+
ar[1]=0
|
143
131
|
when 6e4
|
144
|
-
|
132
|
+
ar[0]=0
|
145
133
|
when 1e3
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
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|
|
159
|
-
|
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|
|
163
|
-
|
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|
|
167
|
-
|
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|
|
171
|
-
|
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|
|
175
|
-
|
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|
|
179
|
-
|
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|
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
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.
|
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
|
-
|
219
|
-
|
230
|
+
end
|
231
|
+
|
220
232
|
while (true)
|
221
|
-
|
222
|
-
|
223
|
-
|
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
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
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
|