rubyvis 0.1.6 → 0.1.7
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.
- data.tar.gz.sig +0 -0
- data/History.txt +4 -0
- data/Manifest.txt +5 -0
- data/examples/fixtures/tipsy.gif +0 -0
- data/examples/image.rb +20 -0
- data/examples/image.svg +1 -0
- data/lib/rubyvis.rb +1 -1
- data/lib/rubyvis/mark.rb +1 -0
- data/lib/rubyvis/mark/image.rb +96 -0
- data/lib/rubyvis/scene/svg_image.rb +30 -0
- data/lib/rubyvis/scene/svg_scene.rb +2 -1
- data/lib/rubyvis/sceneelement.rb +1 -1
- data/web/Rakefile +1 -1
- data/web/examples.haml +11 -0
- data/web/index.haml +10 -0
- metadata +8 -3
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
Binary file
|
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
@@ -13,7 +13,10 @@ examples/crimea/crimea_grouped_bar.rb
|
|
13
13
|
examples/crimea/crimea_line.rb
|
14
14
|
examples/dot.rb
|
15
15
|
examples/first.rb
|
16
|
+
examples/fixtures/tipsy.gif
|
16
17
|
examples/grouped_charts.rb
|
18
|
+
examples/image.rb
|
19
|
+
examples/image.svg
|
17
20
|
examples/line.rb
|
18
21
|
examples/line_and_step.rb
|
19
22
|
examples/nested_grid.rb
|
@@ -38,6 +41,7 @@ lib/rubyvis/mark/anchor.rb
|
|
38
41
|
lib/rubyvis/mark/area.rb
|
39
42
|
lib/rubyvis/mark/bar.rb
|
40
43
|
lib/rubyvis/mark/dot.rb
|
44
|
+
lib/rubyvis/mark/image.rb
|
41
45
|
lib/rubyvis/mark/label.rb
|
42
46
|
lib/rubyvis/mark/line.rb
|
43
47
|
lib/rubyvis/mark/panel.rb
|
@@ -53,6 +57,7 @@ lib/rubyvis/scale/quantitative.rb
|
|
53
57
|
lib/rubyvis/scene/svg_area.rb
|
54
58
|
lib/rubyvis/scene/svg_bar.rb
|
55
59
|
lib/rubyvis/scene/svg_dot.rb
|
60
|
+
lib/rubyvis/scene/svg_image.rb
|
56
61
|
lib/rubyvis/scene/svg_label.rb
|
57
62
|
lib/rubyvis/scene/svg_line.rb
|
58
63
|
lib/rubyvis/scene/svg_panel.rb
|
Binary file
|
data/examples/image.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# = Image
|
2
|
+
# This example shows how to include an image
|
3
|
+
$:.unshift(File.dirname(__FILE__)+"/../lib")
|
4
|
+
require 'rubyvis'
|
5
|
+
|
6
|
+
img_url="fixtures/tipsy.gif"
|
7
|
+
|
8
|
+
vis = pv.Panel.new().width(200).height(200);
|
9
|
+
|
10
|
+
dot=vis.add(pv.Image)
|
11
|
+
.data([1,2,3,4,5,6])
|
12
|
+
.bottom(lambda {|d| d*30})
|
13
|
+
.left(lambda {|d| d*30} )
|
14
|
+
.width(9)
|
15
|
+
.height(9)
|
16
|
+
.url(img_url)
|
17
|
+
|
18
|
+
vis.render()
|
19
|
+
#puts vis.children_inspect
|
20
|
+
puts vis.to_svg
|
data/examples/image.svg
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
<svg fill='none' font-family='sans-serif' font-size='10px' height='200.0' stroke='none' stroke-width='1.5' width='200.0' xmlns:xlink='http://www.w3.org/1999/xlink' xmlns='http://www.w3.org/2000/svg'><g transform='translate(0.0,0.0)'><image height='9' xlink:href='fixtures/tipsy.gif' preserveAspectRatio='none' width='9' x='20' y='161'/><image height='9' xlink:href='fixtures/tipsy.gif' preserveAspectRatio='none' width='9' x='60' y='131'/><image height='9' xlink:href='fixtures/tipsy.gif' preserveAspectRatio='none' width='9' x='100' y='101'/><image height='9' xlink:href='fixtures/tipsy.gif' preserveAspectRatio='none' width='9' x='140' y='71'/><image height='9' xlink:href='fixtures/tipsy.gif' preserveAspectRatio='none' width='9' x='180' y='41'/><image height='9' xlink:href='fixtures/tipsy.gif' preserveAspectRatio='none' width='9' x='220' y='11'/></g></svg>
|
data/lib/rubyvis.rb
CHANGED
@@ -25,7 +25,7 @@ require 'rubyvis/transform'
|
|
25
25
|
module Rubyvis
|
26
26
|
@document=nil
|
27
27
|
# Rubyvis version
|
28
|
-
VERSION = '0.1.
|
28
|
+
VERSION = '0.1.7'
|
29
29
|
# Protovis API on which current Rubyvis is based
|
30
30
|
API_VERSION='3.3'
|
31
31
|
# You actually can do it! http://snipplr.com/view/2137/uses-for-infinity-in-ruby/
|
data/lib/rubyvis/mark.rb
CHANGED
@@ -0,0 +1,96 @@
|
|
1
|
+
module Rubyvis
|
2
|
+
def self.Image
|
3
|
+
Rubyvis::Image
|
4
|
+
end
|
5
|
+
class Image < Bar
|
6
|
+
def type
|
7
|
+
"image"
|
8
|
+
end
|
9
|
+
@properties=Bar.properties.dup
|
10
|
+
attr_accessor :_image
|
11
|
+
def initialize(opts=Hash.new)
|
12
|
+
super(opts)
|
13
|
+
@_image=nil
|
14
|
+
end
|
15
|
+
##
|
16
|
+
# :attr: url
|
17
|
+
# The URL of the image to display. The set of supported image types is
|
18
|
+
# browser-dependent; PNG and JPEG are recommended.
|
19
|
+
|
20
|
+
##
|
21
|
+
# :attr: image_width
|
22
|
+
# The width of the image in pixels. For static images, this property is
|
23
|
+
# computed implicitly from the loaded image resources. For dynamic images, this
|
24
|
+
# property can be used to specify the width of the pixel buffer; otherwise, the
|
25
|
+
# value is derived from the <tt>width</tt> property.
|
26
|
+
|
27
|
+
##
|
28
|
+
# :attr: image_height
|
29
|
+
# The height of the image in pixels. For static images, this property is
|
30
|
+
# computed implicitly from the loaded image resources. For dynamic images, this
|
31
|
+
# property can be used to specify the height of the pixel buffer; otherwise, the
|
32
|
+
# value is derived from the <tt>height</tt> property.
|
33
|
+
|
34
|
+
attr_accessor_dsl :url, :image_width, :image_height
|
35
|
+
|
36
|
+
|
37
|
+
# Default properties for images. By default, there is no stroke or fill style.
|
38
|
+
def self.defaults
|
39
|
+
Image.new.extend(Bar.defaults).fill_style(nil)
|
40
|
+
end
|
41
|
+
|
42
|
+
# @TODO: NOT IMPLEMENTED YET
|
43
|
+
# Specifies the dynamic image function. By default, no image function is
|
44
|
+
# specified and the <tt>url</tt> property is used to load a static image
|
45
|
+
# resource. If an image function is specified, it will be invoked for each
|
46
|
+
# pixel in the image, based on the related <tt>imageWidth</tt> and
|
47
|
+
# <tt>imageHeight</tt> properties.
|
48
|
+
#
|
49
|
+
# <p>For example, given a two-dimensional array <tt>heatmap</tt>, containing
|
50
|
+
# numbers in the range [0, 1] in row-major order, a simple monochrome heatmap
|
51
|
+
# image can be specified as:
|
52
|
+
#
|
53
|
+
# vis.add(pv.Image)
|
54
|
+
# .image_width(heatmap[0].length)
|
55
|
+
# .image_height(heatmap.length)
|
56
|
+
# .image(pv.ramp("white", "black").by(lambda {|x,y| heatmap[y][x]}))
|
57
|
+
#
|
58
|
+
# For fastest performance, use an ordinal scale which caches the fixed color
|
59
|
+
# palette, or return an object literal with <tt>r</tt>, <tt>g</tt>, <tt>b</tt>
|
60
|
+
# and <tt>a</tt> attributes. A {@link pv.Color} or string can also be returned,
|
61
|
+
# though this typically results in slower performance.
|
62
|
+
|
63
|
+
def image(f)
|
64
|
+
f,dummy=arguments
|
65
|
+
@_image = lambda {|*args|
|
66
|
+
c=f.js_apply(self,args)
|
67
|
+
c.nil? ? pv.Color.transparent : (c.is_a?(String) ? Rubyvis.color(c) : c )
|
68
|
+
}
|
69
|
+
self
|
70
|
+
end
|
71
|
+
|
72
|
+
|
73
|
+
# Scan the proto chain for an image function.
|
74
|
+
def bind
|
75
|
+
mark_bind
|
76
|
+
bind=self.binds
|
77
|
+
mark=self
|
78
|
+
begin
|
79
|
+
binds.image = mark._image
|
80
|
+
end while(!binds.image and (mark==mark.proto))
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
def build_implied(s)
|
85
|
+
mark_build_implied(s)
|
86
|
+
return if !s.visible
|
87
|
+
# Compute the implied image dimensions. */
|
88
|
+
s.image_width = s.width if s.image_width.nil?
|
89
|
+
s.image_height = s.height if s.image_height.nil?
|
90
|
+
# Compute the pixel values. */
|
91
|
+
if (s.url.nil? and self.binds.image)
|
92
|
+
raise "not implemented yet"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Rubyvis
|
2
|
+
module SvgScene
|
3
|
+
def self.image(scenes)
|
4
|
+
e=scenes._g.elements[1]
|
5
|
+
scenes.each_with_index do |s,i|
|
6
|
+
next unless s.visible
|
7
|
+
e=self.fill(e,scenes,i)
|
8
|
+
if s.image
|
9
|
+
raise "Not implemented yet"
|
10
|
+
else
|
11
|
+
e = self.expect(e, "image", {
|
12
|
+
"preserveAspectRatio"=> "none",
|
13
|
+
"cursor"=> s.cursor,
|
14
|
+
"x"=> s.left,
|
15
|
+
"y"=> s.top,
|
16
|
+
"width"=> s.width,
|
17
|
+
"height"=> s.height
|
18
|
+
})
|
19
|
+
|
20
|
+
e.add_attribute("xlink:href", s.url);
|
21
|
+
end
|
22
|
+
e = self.append(e, scenes, i);
|
23
|
+
|
24
|
+
#/* stroke */
|
25
|
+
e = self.stroke(e, scenes, i);
|
26
|
+
end
|
27
|
+
e
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -6,6 +6,7 @@ require 'rubyvis/scene/svg_line'
|
|
6
6
|
require 'rubyvis/scene/svg_dot'
|
7
7
|
require 'rubyvis/scene/svg_area'
|
8
8
|
require 'rubyvis/scene/svg_wedge'
|
9
|
+
require 'rubyvis/scene/svg_image'
|
9
10
|
|
10
11
|
class REXML::Element
|
11
12
|
attr_accessor :_scene
|
@@ -77,7 +78,7 @@ module Rubyvis
|
|
77
78
|
if type=='svg'
|
78
79
|
el.add_namespace(self.svg)
|
79
80
|
#el.add_namespace("xmlns:xmlns", self.xmlns)
|
80
|
-
|
81
|
+
el.add_namespace("xmlns:xlink", self.xlink)
|
81
82
|
end
|
82
83
|
el
|
83
84
|
end
|
data/lib/rubyvis/sceneelement.rb
CHANGED
@@ -5,7 +5,7 @@ module Rubyvis
|
|
5
5
|
end
|
6
6
|
include Enumerable
|
7
7
|
attr_accessor :visible
|
8
|
-
attr_accessor :mark, :type, :child_index, :parent, :parent_index, :target, :defs, :data, :antialias, :line_width, :fill_style, :overflow, :width, :height, :top, :bottom, :left, :right, :title, :reverse, :stroke_style, :transform, :canvas, :_g, :events, :cursor, :children, :id, :segmented, :interpolate, :tension, :name, :text_baseline, :text_align, :text, :font, :text_angle, :text_style, :text_margin, :text_decoration, :text_shadow, :line_join, :eccentricity, :shape_size, :shape, :shape_angle, :shape_radius, :start_angle, :end_angle, :angle, :inner_radius, :outer_radius, :layers, :orient, :offset, :order
|
8
|
+
attr_accessor :mark, :type, :child_index, :parent, :parent_index, :target, :defs, :data, :antialias, :line_width, :fill_style, :overflow, :width, :height, :top, :bottom, :left, :right, :title, :reverse, :stroke_style, :transform, :canvas, :_g, :events, :cursor, :children, :id, :segmented, :interpolate, :tension, :name, :text_baseline, :text_align, :text, :font, :text_angle, :text_style, :text_margin, :text_decoration, :text_shadow, :line_join, :eccentricity, :shape_size, :shape, :shape_angle, :shape_radius, :start_angle, :end_angle, :angle, :inner_radius, :outer_radius, :layers, :orient, :offset, :order,:url, :image_width, :image_height, :image
|
9
9
|
|
10
10
|
def []=(v,i)
|
11
11
|
if v.is_a? Numeric
|
data/web/Rakefile
CHANGED
@@ -15,7 +15,7 @@ task :build_site do
|
|
15
15
|
ruby "build_site.rb"
|
16
16
|
end
|
17
17
|
|
18
|
-
task :default=>["index.html"]+EXAMPLES_BASE.map {|v| "examples/#{v}.html"}
|
18
|
+
task :default=>["index.html","../lib/rubyvis.rb"]+EXAMPLES_BASE.map {|v| "examples/#{v}.html"}
|
19
19
|
|
20
20
|
|
21
21
|
file "index.html"=>["index.haml", :build_site]+EXAMPLES_BASE.map {|v| "examples/#{v}.png"}
|
data/web/examples.haml
CHANGED
@@ -24,3 +24,14 @@
|
|
24
24
|
%embed.svg{:src=>svg_file,:width=>"500", :height=>"300"}
|
25
25
|
%object.svg{:data=>svg_file, :type=>"image/svg+xml"}
|
26
26
|
.source=find_and_preserve(source)
|
27
|
+
:javascript
|
28
|
+
var _gaq = _gaq || [];
|
29
|
+
_gaq.push(['_setAccount', 'UA-5764936-8']);
|
30
|
+
_gaq.push(['_trackPageview']);
|
31
|
+
|
32
|
+
(function() {
|
33
|
+
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
34
|
+
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
35
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
36
|
+
})();
|
37
|
+
|
data/web/index.haml
CHANGED
@@ -36,6 +36,7 @@
|
|
36
36
|
bottom(0).
|
37
37
|
left(lambda {self.index * 25})
|
38
38
|
vis.render()
|
39
|
+
puts vis.to_svg # Output final SVG
|
39
40
|
#svg_code
|
40
41
|
%h3 SVG
|
41
42
|
%pre
|
@@ -95,3 +96,12 @@
|
|
95
96
|
API documentation on
|
96
97
|
%a{:href=>'http://rubyvis.rubyforge.org/rubyvis/'}
|
97
98
|
http://rubyvis.rubyforge.org/rubyvis/
|
99
|
+
:javascript
|
100
|
+
var _gaq = _gaq || [];
|
101
|
+
_gaq.push(['_setAccount', 'UA-5764936-8']);
|
102
|
+
_gaq.push(['_trackPageview']);
|
103
|
+
(function() {
|
104
|
+
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
105
|
+
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
106
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
107
|
+
})();
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 7
|
9
|
+
version: 0.1.7
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Claudio Bustos
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
rpP0jjs0
|
36
36
|
-----END CERTIFICATE-----
|
37
37
|
|
38
|
-
date: 2010-10-
|
38
|
+
date: 2010-10-31 00:00:00 -03:00
|
39
39
|
default_executable:
|
40
40
|
dependencies:
|
41
41
|
- !ruby/object:Gem::Dependency
|
@@ -93,7 +93,10 @@ files:
|
|
93
93
|
- examples/crimea/crimea_line.rb
|
94
94
|
- examples/dot.rb
|
95
95
|
- examples/first.rb
|
96
|
+
- examples/fixtures/tipsy.gif
|
96
97
|
- examples/grouped_charts.rb
|
98
|
+
- examples/image.rb
|
99
|
+
- examples/image.svg
|
97
100
|
- examples/line.rb
|
98
101
|
- examples/line_and_step.rb
|
99
102
|
- examples/nested_grid.rb
|
@@ -118,6 +121,7 @@ files:
|
|
118
121
|
- lib/rubyvis/mark/area.rb
|
119
122
|
- lib/rubyvis/mark/bar.rb
|
120
123
|
- lib/rubyvis/mark/dot.rb
|
124
|
+
- lib/rubyvis/mark/image.rb
|
121
125
|
- lib/rubyvis/mark/label.rb
|
122
126
|
- lib/rubyvis/mark/line.rb
|
123
127
|
- lib/rubyvis/mark/panel.rb
|
@@ -133,6 +137,7 @@ files:
|
|
133
137
|
- lib/rubyvis/scene/svg_area.rb
|
134
138
|
- lib/rubyvis/scene/svg_bar.rb
|
135
139
|
- lib/rubyvis/scene/svg_dot.rb
|
140
|
+
- lib/rubyvis/scene/svg_image.rb
|
136
141
|
- lib/rubyvis/scene/svg_label.rb
|
137
142
|
- lib/rubyvis/scene/svg_line.rb
|
138
143
|
- lib/rubyvis/scene/svg_panel.rb
|
metadata.gz.sig
CHANGED
Binary file
|