rubyvis 0.4.0 → 0.4.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.
- data.tar.gz.sig +3 -2
- data/History.txt +6 -0
- data/Rakefile +1 -1
- data/examples/5_pv_hierarchies/bubble_charts.rb +1 -1
- data/examples/5_pv_hierarchies/bubble_charts_matrix.rb +1 -1
- data/examples/5_pv_hierarchies/circle_packing.rb +1 -1
- data/examples/5_pv_hierarchies/dendogram.rb +1 -1
- data/examples/5_pv_hierarchies/icicle.rb +1 -1
- data/examples/5_pv_hierarchies/indent.rb +1 -1
- data/examples/5_pv_hierarchies/node_link_tree.rb +1 -1
- data/examples/5_pv_hierarchies/sunburst.rb +1 -1
- data/examples/5_pv_hierarchies/treemap.rb +1 -1
- data/lib/rubyvis.rb +1 -1
- data/lib/rubyvis/color/color.rb +35 -34
- data/lib/rubyvis/color/colors.rb +1 -1
- data/lib/rubyvis/internals.rb +2 -2
- data/lib/rubyvis/layout.rb +4 -1
- data/lib/rubyvis/layout/matrix.rb +105 -105
- data/lib/rubyvis/layout/network.rb +3 -3
- data/lib/rubyvis/mark.rb +5 -4
- data/lib/rubyvis/mark/area.rb +1 -1
- data/lib/rubyvis/mark/image.rb +1 -1
- data/lib/rubyvis/mark/rule.rb +2 -2
- data/lib/rubyvis/mark/shorcut_methods.rb +1 -0
- data/lib/rubyvis/mark/wedge.rb +31 -22
- data/lib/rubyvis/nest.rb +1 -1
- data/lib/rubyvis/scale/ordinal.rb +1 -1
- data/lib/rubyvis/scale/quantitative.rb +2 -1
- data/lib/rubyvis/scene/svg_curve.rb +24 -14
- data/lib/rubyvis/scene/svg_dot.rb +1 -1
- data/lib/rubyvis/scene/svg_label.rb +3 -2
- data/lib/rubyvis/scene/svg_scene.rb +6 -12
- data/spec/anchor_spec.rb +3 -3
- data/spec/area_spec.rb +22 -22
- data/spec/dot_spec.rb +9 -9
- data/spec/layout_arc_spec.rb +8 -8
- data/spec/layout_cluster_spec.rb +7 -6
- data/spec/layout_grid_spec.rb +18 -18
- data/spec/layout_indent_spec.rb +6 -6
- data/spec/layout_matrix_spec.rb +9 -9
- data/spec/layout_pack_spec.rb +6 -6
- data/spec/layout_partition_spec.rb +6 -6
- data/spec/layout_stack_spec.rb +10 -10
- data/spec/layout_tree_spec.rb +6 -6
- data/spec/layout_treemap_spec.rb +4 -4
- data/spec/line_spec.rb +14 -14
- data/spec/nest_spec.rb +2 -2
- data/spec/rule_spec.rb +11 -12
- data/spec/spec_helper.rb +8 -7
- data/spec/wedge_spec.rb +22 -22
- data/web/Rakefile +4 -1
- metadata +18 -5
- metadata.gz.sig +0 -0
@@ -121,7 +121,7 @@ module Rubyvis
|
|
121
121
|
|
122
122
|
|
123
123
|
def _link # :nodoc:
|
124
|
-
that=self
|
124
|
+
#that=self
|
125
125
|
l=Mark.new().
|
126
126
|
mark_extend(@node).
|
127
127
|
data(lambda {|d| [d.source_node, d.target_node] }).
|
@@ -135,7 +135,7 @@ module Rubyvis
|
|
135
135
|
|
136
136
|
|
137
137
|
def _node_label #:nodoc:
|
138
|
-
that=self
|
138
|
+
#that=self
|
139
139
|
nl=Mark.new().
|
140
140
|
mark_extend(@node).
|
141
141
|
text_margin(7).
|
@@ -185,7 +185,7 @@ module Rubyvis
|
|
185
185
|
|
186
186
|
|
187
187
|
attr_accessor_dsl [:links, lambda {|v|
|
188
|
-
|
188
|
+
# out=[]
|
189
189
|
v.map {|d|
|
190
190
|
if !d.link_value.is_a? Numeric
|
191
191
|
d.link_value = !d.value.is_a?(Numeric) ? 1 : d.value
|
data/lib/rubyvis/mark.rb
CHANGED
@@ -184,7 +184,8 @@ module Rubyvis
|
|
184
184
|
def self.property_method(name, _def, func=nil, klass=nil)
|
185
185
|
return if klass.method_defined? name
|
186
186
|
klass.send(:define_method, name) do |*arguments,&block|
|
187
|
-
v
|
187
|
+
v=arguments[0]
|
188
|
+
#v,dummy = arguments
|
188
189
|
if block
|
189
190
|
v=block
|
190
191
|
end
|
@@ -803,8 +804,8 @@ module Rubyvis
|
|
803
804
|
stack.shift
|
804
805
|
else
|
805
806
|
mark.build
|
806
|
-
Rubyvis.
|
807
|
-
Rubyvis.
|
807
|
+
Rubyvis::SvgScene.scale = scale;
|
808
|
+
Rubyvis::SvgScene.update_all(mark.scene);
|
808
809
|
end
|
809
810
|
mark.scale=nil
|
810
811
|
end
|
@@ -947,7 +948,7 @@ module Rubyvis
|
|
947
948
|
end while(mark=mark.parent)
|
948
949
|
end
|
949
950
|
def context(scene, index, f) # :nodoc:
|
950
|
-
proto=Mark
|
951
|
+
#proto=Mark
|
951
952
|
stack=Mark.stack
|
952
953
|
oscene=Mark.scene
|
953
954
|
oindex=Mark.index
|
data/lib/rubyvis/mark/area.rb
CHANGED
data/lib/rubyvis/mark/image.rb
CHANGED
@@ -61,7 +61,7 @@ module Rubyvis
|
|
61
61
|
# though this typically results in slower performance.
|
62
62
|
|
63
63
|
def dynamic_image(f)
|
64
|
-
f,dummy=arguments
|
64
|
+
#f,dummy=arguments
|
65
65
|
@_image = lambda {|*args|
|
66
66
|
c=f.js_apply(self,args)
|
67
67
|
c.nil? ? pv.Color.transparent : (c.is_a?(String) ? Rubyvis.color(c) : c )
|
data/lib/rubyvis/mark/rule.rb
CHANGED
data/lib/rubyvis/mark/wedge.rb
CHANGED
@@ -31,63 +31,72 @@ module Rubyvis
|
|
31
31
|
mark_anchor(name).left(lambda {
|
32
32
|
s = self.scene.target[self.index];
|
33
33
|
if (partial.call(s))
|
34
|
-
|
35
34
|
case (self.name())
|
36
35
|
when "outer"
|
37
|
-
|
36
|
+
s.left + s.outer_radius * Math.cos(mid_angle.call(s))
|
38
37
|
when "inner"
|
39
|
-
|
38
|
+
s.left + s.inner_radius * Math.cos(mid_angle.call(s))
|
40
39
|
when "start"
|
41
|
-
|
40
|
+
s.left + mid_radius.call(s) * Math.cos(s.start_angle)
|
42
41
|
when "center"
|
43
|
-
|
42
|
+
s.left + mid_radius.call(s) * Math.cos(mid_angle.call(s))
|
44
43
|
when "end"
|
45
|
-
|
44
|
+
s.left + mid_radius.call(s) * Math.cos(s.end_angle)
|
45
|
+
else
|
46
|
+
s.left
|
46
47
|
end
|
47
|
-
|
48
|
-
|
48
|
+
else
|
49
|
+
s.left
|
50
|
+
end
|
49
51
|
}).top(lambda {
|
50
52
|
s = self.scene.target[self.index];
|
51
53
|
if (partial.call(s))
|
52
54
|
case (self.name())
|
53
55
|
when "outer"
|
54
|
-
|
56
|
+
s.top + s.outer_radius * Math.sin(mid_angle.call(s))
|
55
57
|
when "inner"
|
56
|
-
|
58
|
+
s.top + s.inner_radius * Math.sin(mid_angle.call(s))
|
57
59
|
when "start"
|
58
|
-
|
60
|
+
s.top + mid_radius.call(s) * Math.sin(s.start_angle)
|
59
61
|
when "center"
|
60
|
-
|
62
|
+
s.top + mid_radius.call(s) * Math.sin(mid_angle.call(s))
|
61
63
|
when "end"
|
62
|
-
|
64
|
+
s.top + mid_radius.call(s) * Math.sin(s.end_angle)
|
65
|
+
else
|
66
|
+
s.top
|
63
67
|
end
|
68
|
+
else
|
69
|
+
s.top
|
64
70
|
end
|
65
|
-
return s.top;
|
66
71
|
|
67
72
|
}).text_align(lambda {
|
68
73
|
s = self.scene.target[self.index];
|
69
74
|
if (partial.call(s))
|
70
75
|
case (self.name())
|
71
76
|
when 'outer'
|
72
|
-
|
77
|
+
that.upright(mid_angle.call(s)) ? 'right':'left'
|
73
78
|
when 'inner'
|
74
|
-
|
75
|
-
|
79
|
+
that.upright(mid_angle.call(s)) ? 'left':'right'
|
80
|
+
else
|
81
|
+
'center'
|
76
82
|
end
|
83
|
+
else
|
84
|
+
'center'
|
77
85
|
end
|
78
|
-
return 'center'
|
79
86
|
}).text_baseline(lambda {
|
80
87
|
s = self.scene.target[self.index];
|
81
88
|
if (partial.call(s))
|
82
89
|
case (self.name())
|
83
90
|
when 'start'
|
84
|
-
|
91
|
+
that.upright(s.start_angle) ? 'top':'bottom'
|
85
92
|
when 'end'
|
86
|
-
|
87
|
-
|
93
|
+
that.upright(s.end_angle) ? 'bottom':'top'
|
94
|
+
else
|
95
|
+
'middle'
|
88
96
|
end
|
97
|
+
else
|
98
|
+
'middle'
|
89
99
|
end
|
90
|
-
return 'middle'
|
91
100
|
}).text_angle(lambda {
|
92
101
|
s = self.scene.target[self.index];
|
93
102
|
a=0
|
data/lib/rubyvis/nest.rb
CHANGED
@@ -393,7 +393,8 @@ module Rubyvis
|
|
393
393
|
|
394
394
|
@tick_format= Rubyvis.Format.number.fraction_digits([0, -(Rubyvis.log(step, 10) + 0.01).floor].max).to_proc
|
395
395
|
|
396
|
-
ticks = Rubyvis.range(start, _end + step, step)
|
396
|
+
ticks = Rubyvis.range(start, _end + step, step)
|
397
|
+
|
397
398
|
return reverse ? ticks.reverse() : ticks;
|
398
399
|
end
|
399
400
|
|
@@ -258,11 +258,14 @@ module Rubyvis::SvgScene
|
|
258
258
|
d = []
|
259
259
|
m = []
|
260
260
|
dx = []
|
261
|
-
k=0
|
261
|
+
#k=0
|
262
262
|
|
263
263
|
#/* Compute the slopes of the secant lines between successive points. */
|
264
264
|
|
265
|
-
|
265
|
+
|
266
|
+
0.upto(points.size-2) do |k|
|
267
|
+
|
268
|
+
# while(k < points.size-1) do
|
266
269
|
d[k] = (points[k+1].top - points[k].top) / (points[k+1].left - points[k].left).to_f
|
267
270
|
k+=1
|
268
271
|
end
|
@@ -270,31 +273,38 @@ module Rubyvis::SvgScene
|
|
270
273
|
#/* Initialize the tangents at every point as the average of the secants. */
|
271
274
|
m[0] = d[0]
|
272
275
|
dx[0] = points[1].left - points[0].left
|
276
|
+
|
277
|
+
|
273
278
|
1.upto(points.size-2) {|k|
|
274
279
|
m[k] = (d[k-1]+d[k]) / 2.0
|
275
280
|
dx[k] = (points[k+1].left - points[k-1].left) / 2.0
|
276
281
|
}
|
282
|
+
|
283
|
+
k=points.size-1
|
284
|
+
|
277
285
|
m[k] = d[k-1];
|
278
286
|
dx[k] = (points[k].left - points[k-1].left);
|
279
287
|
|
280
288
|
# /* Step 3. Very important, step 3. Yep. Wouldn't miss it. */
|
281
|
-
(points.size-1).times {|
|
282
|
-
if d[
|
283
|
-
m[
|
284
|
-
m[
|
289
|
+
(points.size-1).times {|kk|
|
290
|
+
if d[kk] == 0
|
291
|
+
m[ kk ] = 0;
|
292
|
+
m[kk + 1] = 0;
|
285
293
|
end
|
286
294
|
}
|
287
295
|
|
288
296
|
# /* Step 4 + 5. Out of 5 or more steps. */
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
297
|
+
|
298
|
+
|
299
|
+
(points.size-1).times {|kk|
|
300
|
+
next if ((m[kk].abs < 1e-5) or (m[kk+1].abs < 1e-5))
|
301
|
+
akk = m[kk] / d[kk].to_f
|
302
|
+
bkk = m[kk + 1] / d[kk].to_f
|
303
|
+
s = akk * akk + bkk * bkk; # monotone constant (?)
|
294
304
|
if (s > 9)
|
295
|
-
|
296
|
-
m[
|
297
|
-
m[
|
305
|
+
tkk = 3.0 / Math.sqrt(s)
|
306
|
+
m[kk] = tkk * akk * d[kk]
|
307
|
+
m[kk + 1] = tkk * bkk * d[kk]
|
298
308
|
end
|
299
309
|
}
|
300
310
|
len=nil;
|
@@ -39,7 +39,7 @@ module Rubyvis
|
|
39
39
|
"pointer-events"=> s.events,
|
40
40
|
"cursor"=> s.cursor,
|
41
41
|
"fill"=> fill.color,
|
42
|
-
"fill-opacity"=> (fill.opacity==0) ? nil :fill.opacity,
|
42
|
+
"fill-opacity"=> (fill.opacity==0) ? nil : fill.opacity,
|
43
43
|
"stroke"=> stroke.color,
|
44
44
|
"stroke-opacity"=> (stroke.opacity==0) ? nil : stroke.opacity,
|
45
45
|
"stroke-width"=> (stroke.opacity!=0) ? s.line_width / self.scale : nil
|
@@ -40,8 +40,9 @@ module Rubyvis
|
|
40
40
|
"fill-opacity"=> fill.opacity==0 ? nil : fill.opacity,
|
41
41
|
"text-anchor"=> anchor
|
42
42
|
}, {
|
43
|
-
"font"=> s.font, "text-shadow"=> s.text_shadow, "text-decoration"=> s.text_decoration
|
44
|
-
|
43
|
+
"font"=> s.font, "text-shadow"=> s.text_shadow, "text-decoration"=> s.text_decoration})
|
44
|
+
|
45
|
+
e.text=s.text.frozen? ? s.text.dup : s.text
|
45
46
|
|
46
47
|
|
47
48
|
e=SvgScene.append(e,scenes,i)
|
@@ -14,9 +14,6 @@ class REXML::Element #:nodoc:
|
|
14
14
|
end
|
15
15
|
|
16
16
|
module Rubyvis
|
17
|
-
def self.Scene # :nodoc:
|
18
|
-
Rubyvis::SvgScene
|
19
|
-
end
|
20
17
|
module SvgScene # :nodoc:
|
21
18
|
#include REXML
|
22
19
|
def self.svg
|
@@ -38,8 +35,7 @@ module Rubyvis
|
|
38
35
|
def self.scale=(v)
|
39
36
|
@scale=v
|
40
37
|
end
|
41
|
-
|
42
|
-
svg={
|
38
|
+
IMPLICIT={:svg=>{
|
43
39
|
"shape-rendering"=> "auto",
|
44
40
|
"pointer-events"=> "painted",
|
45
41
|
"x"=> 0,
|
@@ -53,11 +49,9 @@ module Rubyvis
|
|
53
49
|
"stroke-opacity"=> 1,
|
54
50
|
"stroke-width"=> 1.5,
|
55
51
|
"stroke-linejoin"=> "miter"
|
56
|
-
}
|
57
|
-
|
58
|
-
|
59
|
-
{:svg=>svg,:css=>css}
|
60
|
-
end
|
52
|
+
},:css=>{"font"=>"10px sans-serif"}
|
53
|
+
}
|
54
|
+
|
61
55
|
def self.update_all(scenes)
|
62
56
|
puts "update_all: #{scenes.inspect}" if $DEBUG
|
63
57
|
if (scenes.size>0 and scenes[0].reverse and scenes.type!='line' and scenes.type!='area')
|
@@ -130,7 +124,7 @@ module Rubyvis
|
|
130
124
|
e = self.create(type)
|
131
125
|
end
|
132
126
|
attributes.each {|name,value|
|
133
|
-
value = nil if (value ==
|
127
|
+
value = nil if (value == IMPLICIT[:svg][name])
|
134
128
|
if (value.nil?)
|
135
129
|
e.delete_attribute(name)
|
136
130
|
else
|
@@ -147,7 +141,7 @@ module Rubyvis
|
|
147
141
|
array_styles[$1]=$2
|
148
142
|
}
|
149
143
|
style.each {|name,value|
|
150
|
-
value=nil if value==
|
144
|
+
value=nil if value==IMPLICIT[:css][name]
|
151
145
|
if (value.nil?)
|
152
146
|
array_styles.delete(name)
|
153
147
|
else
|
data/spec/anchor_spec.rb
CHANGED
@@ -107,9 +107,9 @@ describe Rubyvis::Anchor do
|
|
107
107
|
end
|
108
108
|
end
|
109
109
|
it "should render equal to protovis 'anchor.html' example" do
|
110
|
-
@vis = Rubyvis::Panel.new()
|
111
|
-
|
112
|
-
|
110
|
+
@vis = Rubyvis::Panel.new().
|
111
|
+
width(200).
|
112
|
+
height(200)
|
113
113
|
|
114
114
|
@vis.add(Rubyvis::Bar).
|
115
115
|
fill_style("#ccc").
|
data/spec/area_spec.rb
CHANGED
@@ -10,21 +10,21 @@ describe Rubyvis::Area do
|
|
10
10
|
end
|
11
11
|
it "should render equal to protovis 'area-segmented.html' test" do
|
12
12
|
data=Rubyvis.range(0, 6, 0.1).map {|x| Math.sin(x)}
|
13
|
-
vis = Rubyvis.Panel.new()
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
13
|
+
vis = Rubyvis.Panel.new().
|
14
|
+
width(500).
|
15
|
+
height(200).
|
16
|
+
top(50).
|
17
|
+
bottom(50).
|
18
|
+
left(10).
|
19
|
+
right(10)
|
20
20
|
|
21
|
-
vis.add(Rubyvis::Area)
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
21
|
+
vis.add(Rubyvis::Area).
|
22
|
+
segmented(true).
|
23
|
+
data(data).
|
24
|
+
bottom(0).
|
25
|
+
left(lambda {self.index / 59.0 * 500}).
|
26
|
+
height(lambda {|d| (d + 1) / 2.0 * 200 + 50}).
|
27
|
+
fill_style(lambda {|d| "hsl(#{(d + 1) * 180.0},50,50)"})
|
28
28
|
vis.render()
|
29
29
|
pv_out=fixture_svg_read("area_segmented.svg")
|
30
30
|
vis.to_svg.should have_same_svg_elements(pv_out)
|
@@ -53,13 +53,13 @@ describe Rubyvis::Area do
|
|
53
53
|
interpolations=["linear","step-before","step-after", "basis", "cardinal", "monotone"]
|
54
54
|
|
55
55
|
#/* The root panel. */
|
56
|
-
vis = pv.Panel.new()
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
56
|
+
vis = pv.Panel.new().
|
57
|
+
width(w).
|
58
|
+
height(h).
|
59
|
+
bottom(20).
|
60
|
+
left(20).
|
61
|
+
right(10).
|
62
|
+
top(5)
|
63
63
|
|
64
64
|
interpolations.each_with_index do |inter,i|
|
65
65
|
n=i%2
|
@@ -74,7 +74,7 @@ describe Rubyvis::Area do
|
|
74
74
|
panel.add(Rubyvis::Area).data(data).
|
75
75
|
bottom(0).
|
76
76
|
segmented(true).
|
77
|
-
fill_style(lambda {
|
77
|
+
fill_style(lambda {color[self.index]}).
|
78
78
|
left(lambda {|d| x.scale(d.x)}).
|
79
79
|
height(lambda {|d| y.scale(d.y)}).
|
80
80
|
interpolate(inter)
|