gerbilcharts 0.2.10 → 0.2.12
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/History.txt +14 -4
- data/README.txt +0 -2
- data/lib/gerbilcharts/charts/area_chart.rb +4 -0
- data/lib/gerbilcharts/charts/bar_chart.rb +3 -0
- data/lib/gerbilcharts/charts/bar_chart_compact.rb +3 -0
- data/lib/gerbilcharts/charts/chart_base.rb +2 -0
- data/lib/gerbilcharts/charts/pie_chart.rb +2 -3
- data/lib/gerbilcharts/charts/stacked_area_chart.rb +1 -0
- data/lib/gerbilcharts/models/discrete_time_range.rb +10 -1
- data/lib/gerbilcharts/models/monotonous_graph_model.rb +27 -2
- data/lib/gerbilcharts/models/round_range.rb +2 -0
- data/lib/gerbilcharts/models/round_time_range.rb +3 -3
- data/lib/gerbilcharts/public/brushmetal.css +9 -1
- data/lib/gerbilcharts/public/gerbil.js +30 -0
- data/lib/gerbilcharts/surfaces.rb +1 -0
- data/lib/gerbilcharts/surfaces/area_surface.rb +5 -0
- data/lib/gerbilcharts/surfaces/bar_surface.rb +6 -0
- data/lib/gerbilcharts/surfaces/legend.rb +10 -2
- data/lib/gerbilcharts/surfaces/pie_surface.rb +34 -27
- data/lib/gerbilcharts/svgdc.rb +1 -0
- data/lib/gerbilcharts/svgdc/svgdc.rb +1 -1
- data/lib/gerbilcharts/version.rb +1 -1
- data/test/test_bar.rb +4 -3
- data/test/test_lines.rb +3 -1
- data/test/test_noob.rb +5 -4
- data/test/test_pie.rb +13 -13
- metadata +2 -2
data/History.txt
CHANGED
@@ -1,8 +1,18 @@
|
|
1
|
-
== 0.2.
|
1
|
+
== 0.2.11 2009-12-01
|
2
2
|
* Changes
|
3
|
-
*
|
4
|
-
*
|
5
|
-
*
|
3
|
+
* inline javascript option now fixed
|
4
|
+
* grid sublines work for first label interval now
|
5
|
+
* detailed legend showing max/min/avg/latest
|
6
|
+
* option to switch between mini and detailed legends
|
7
|
+
* various other fixes and tweaks
|
8
|
+
|
9
|
+
== 0.2.6 2009-10-27
|
10
|
+
* Changes
|
11
|
+
* Negative values work good
|
12
|
+
* Much better timerange selection
|
13
|
+
* Auto tooltips for surfaces that allow it
|
14
|
+
* Butterfly surface Area surface (such as in/out charts)
|
15
|
+
* Other misc changes
|
6
16
|
|
7
17
|
== 0.2.3 2009-10-19
|
8
18
|
* Changes
|
data/README.txt
CHANGED
@@ -16,12 +16,16 @@ class AreaChart < ChartBase
|
|
16
16
|
# anchor (line surface)
|
17
17
|
@thechart.create_filter(GerbilCharts::SVGDC::LinearGradientVertical.new("vertgrad","rgb(255,255,255)","rgb(224,224,224)"))
|
18
18
|
|
19
|
+
# additional filter by name
|
20
|
+
@thechart.create_filter(GerbilCharts::SVGDC::LikeButton.new('LikeButton')) if @gerbilfilter == 'LikeButton'
|
21
|
+
|
19
22
|
# other elements
|
20
23
|
@thechart.add_child(GerbilCharts::Surfaces::SurfaceBackground.new(:orient => ORIENT_OVERLAY))
|
21
24
|
@thechart.add_child(GerbilCharts::Surfaces::BasicGrid.new(:orient => ORIENT_OVERLAY))
|
22
25
|
@thechart.add_child(GerbilCharts::Surfaces::TitlePanel.new(:orient => ORIENT_OVERLAY, :dim => 30))
|
23
26
|
@thechart.add_child(GerbilCharts::Surfaces::AreaSurface.new(:orient => ORIENT_OVERLAY),:anchor => true)
|
24
27
|
@thechart.add_child(GerbilCharts::Surfaces::Legend.new(:orient=> ORIENT_OVERLAY, :dim => @legend_width))
|
28
|
+
@thechart.add_child(GerbilCharts::Surfaces::DetailedLegend.new(:orient=> ORIENT_OVERLAY, :dim => 3*@legend_width))
|
25
29
|
@thechart.add_child(GerbilCharts::Surfaces::VerticalAxis.new(:orient => ORIENT_WEST, :dim => 40 ))
|
26
30
|
@thechart.add_child(GerbilCharts::Surfaces::HorizontalTimeAxis.new(:orient => ORIENT_SOUTH, :dim => 25 ))
|
27
31
|
|
@@ -20,6 +20,9 @@ class BarChart < ChartBase
|
|
20
20
|
|
21
21
|
# anchor (line surface)
|
22
22
|
@thechart.create_filter(GerbilCharts::SVGDC::LinearGradientVertical.new("vertgrad","rgb(255,255,255)","rgb(224,224,224)"))
|
23
|
+
|
24
|
+
# additional filter by name
|
25
|
+
@thechart.create_filter(GerbilCharts::SVGDC::LikeButton.new('LikeButton')) if @gerbilfilter == 'LikeButton'
|
23
26
|
|
24
27
|
# other elements
|
25
28
|
@thechart.add_child(GerbilCharts::Surfaces::SurfaceBackground.new(:orient => ORIENT_OVERLAY))
|
@@ -14,6 +14,9 @@ class BarChartCompact < ChartBase
|
|
14
14
|
# anchor (line surface)
|
15
15
|
@thechart.create_filter(GerbilCharts::SVGDC::LinearGradientVertical.new("vertgrad","rgb(255,255,255)","rgb(224,224,224)"))
|
16
16
|
|
17
|
+
# additional filter by name
|
18
|
+
@thechart.create_filter(GerbilCharts::SVGDC::LikeButton.new('LikeButton')) if @gerbilfilter == 'LikeButton'
|
19
|
+
|
17
20
|
# other elements
|
18
21
|
@thechart.add_child(GerbilCharts::Surfaces::SurfaceBackground.new(:orient => ORIENT_OVERLAY))
|
19
22
|
@thechart.add_child(GerbilCharts::Surfaces::TitlePanel.new(:orient => ORIENT_OVERLAY, :dim => 30, :just => :right))
|
@@ -11,7 +11,6 @@ class PieChart < ChartBase
|
|
11
11
|
def initialize(opt={})
|
12
12
|
super(opt)
|
13
13
|
|
14
|
-
@gerbilfilter = opt[:filter] || ""
|
15
14
|
|
16
15
|
end
|
17
16
|
|
@@ -21,8 +20,8 @@ class PieChart < ChartBase
|
|
21
20
|
@thechart.create_filter(GerbilCharts::SVGDC::LinearGradientVertical.new("vertgrad",
|
22
21
|
"rgb(255,255,255)","rgb(224,224,224)"))
|
23
22
|
|
24
|
-
|
25
|
-
|
23
|
+
# additional filter by name
|
24
|
+
@thechart.create_filter(GerbilCharts::SVGDC::LikeButton.new('LikeButton')) if @gerbilfilter == 'LikeButton'
|
26
25
|
|
27
26
|
|
28
27
|
# other elements
|
@@ -17,6 +17,7 @@ class StackedAreaChart < ChartBase
|
|
17
17
|
@thechart.add_child(GerbilCharts::Surfaces::TitlePanel.new(:orient => ORIENT_OVERLAY, :dim => 30))
|
18
18
|
@thechart.add_child(GerbilCharts::Surfaces::StackedAreaSurface.new(:orient => ORIENT_OVERLAY),:anchor => true)
|
19
19
|
@thechart.add_child(GerbilCharts::Surfaces::Legend.new(:orient=> ORIENT_OVERLAY, :dim => @legend_width))
|
20
|
+
@thechart.add_child(GerbilCharts::Surfaces::DetailedLegend.new(:orient=> ORIENT_OVERLAY, :dim => 3*@legend_width))
|
20
21
|
@thechart.add_child(GerbilCharts::Surfaces::VerticalAxis.new(:orient => ORIENT_WEST, :dim => 40 , :cumulative => true ))
|
21
22
|
@thechart.add_child(GerbilCharts::Surfaces::HorizontalTimeAxis.new(:orient => ORIENT_SOUTH, :dim => 25 ))
|
22
23
|
|
@@ -20,10 +20,19 @@ class DiscreteTimeRange
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
+
def rmax
|
24
|
+
@points.first
|
25
|
+
end
|
26
|
+
|
27
|
+
def rmin
|
28
|
+
@points.last
|
29
|
+
end
|
30
|
+
|
31
|
+
|
23
32
|
# provide ticks (per label interval)
|
24
33
|
def each_tick(tpl)
|
25
34
|
@points.each do |t|
|
26
|
-
yield
|
35
|
+
yield t
|
27
36
|
end
|
28
37
|
end
|
29
38
|
|
@@ -82,6 +82,10 @@ class MonotonousGraphModel < GraphModel
|
|
82
82
|
def latest_formatted_val
|
83
83
|
return @yrange.format_value(@yarr.last)
|
84
84
|
end
|
85
|
+
|
86
|
+
def formatted_val rawval
|
87
|
+
return @yrange.format_value(rawval)
|
88
|
+
end
|
85
89
|
|
86
90
|
def ranges
|
87
91
|
yield @xrange, @yrange if block_given?
|
@@ -143,8 +147,30 @@ class MonotonousGraphModel < GraphModel
|
|
143
147
|
v=@yarr.last
|
144
148
|
@yarr[@yarr.size-1]=v * ( 0.5 + rand())
|
145
149
|
end
|
146
|
-
|
147
150
|
|
151
|
+
# statistical analysis
|
152
|
+
# standard deviation and 95th percentile go here
|
153
|
+
#
|
154
|
+
# mode => :normal or :ninety_fifth
|
155
|
+
#
|
156
|
+
# returns array 0 = min, 1 = max, 2 = avg, 3 = total, 4 = latest
|
157
|
+
# todo : 5 = stddev
|
158
|
+
# todo : support :ninety_fifth
|
159
|
+
#
|
160
|
+
def get_statistical_analysis(mode = :normal)
|
161
|
+
a = []
|
162
|
+
a[0]= @yrange.rmin
|
163
|
+
a[1]= @yrange.rmax
|
164
|
+
a[3]=0
|
165
|
+
|
166
|
+
@yarr.each do |v|
|
167
|
+
a[3] = a[3] + v
|
168
|
+
end
|
169
|
+
a[2] = a[3]/@yarr.size
|
170
|
+
a[4] = latest_val
|
171
|
+
return a
|
172
|
+
end
|
173
|
+
|
148
174
|
private
|
149
175
|
# recompute ranges
|
150
176
|
def recompute_ranges
|
@@ -158,7 +184,6 @@ private
|
|
158
184
|
|
159
185
|
end
|
160
186
|
|
161
|
-
|
162
187
|
# rudimentary binary search
|
163
188
|
def binarySearch(array, target, i, n)
|
164
189
|
case n
|
@@ -60,13 +60,13 @@ class RoundTimeRange < RawRange
|
|
60
60
|
subtick_delta = ideal_subtick_interval(@ldelta)
|
61
61
|
|
62
62
|
if (@rmin.tv_sec % @ldelta) != @gmhalfhour
|
63
|
-
ni_sec = (@rmin.tv_sec
|
63
|
+
ni_sec = (@rmin.tv_sec+subtick_delta)/subtick_delta
|
64
64
|
|
65
65
|
# if labeling hours, make sure you account tz weirdness like india GMT +5:30
|
66
66
|
if @ldelta >= 3600
|
67
|
-
v = Time.at(
|
67
|
+
v = Time.at(subtick_delta* ni_sec.to_i - @gmhalfhour)
|
68
68
|
else
|
69
|
-
v = Time.at(
|
69
|
+
v = Time.at(subtick_delta * ni_sec.to_i)
|
70
70
|
end
|
71
71
|
else
|
72
72
|
v = @rmin
|
@@ -182,11 +182,19 @@
|
|
182
182
|
|
183
183
|
.legendtext
|
184
184
|
{
|
185
|
-
font-family:
|
185
|
+
font-family: sans;
|
186
186
|
font-size: 10px;
|
187
187
|
fill: black;
|
188
188
|
stroke: none;
|
189
189
|
}
|
190
|
+
.legendstats
|
191
|
+
{
|
192
|
+
font-family: sans;
|
193
|
+
font-size: 9px;
|
194
|
+
fill: black;
|
195
|
+
stroke: none;
|
196
|
+
}
|
197
|
+
|
190
198
|
.elementlabel
|
191
199
|
{
|
192
200
|
font-family: sans;
|
@@ -57,6 +57,36 @@ function TestUpdates1(evt)
|
|
57
57
|
tnode.firstChild.nodeValue="Changed by Ajax2";
|
58
58
|
}
|
59
59
|
|
60
|
+
// Switch between detailed and mini legend panels
|
61
|
+
function showMiniLegend()
|
62
|
+
{
|
63
|
+
var l_hide = SVGDocument.getElementById("legendpanel_detail");
|
64
|
+
if (l_hide)
|
65
|
+
{
|
66
|
+
l_hide.setAttributeNS(null, 'visibility', 'hidden');
|
67
|
+
}
|
68
|
+
var l_show = SVGDocument.getElementById("legendpanel_mini");
|
69
|
+
if (l_show)
|
70
|
+
{
|
71
|
+
l_show.setAttributeNS(null, 'visibility', 'visible');
|
72
|
+
}
|
73
|
+
}
|
74
|
+
|
75
|
+
// Switch between detailed and mini legend panels
|
76
|
+
function showDetailedLegend()
|
77
|
+
{
|
78
|
+
var l_hide = SVGDocument.getElementById("legendpanel_mini");
|
79
|
+
if (l_hide)
|
80
|
+
{
|
81
|
+
l_hide.setAttributeNS(null, 'visibility', 'hidden');
|
82
|
+
}
|
83
|
+
var l_show = SVGDocument.getElementById("legendpanel_detail");
|
84
|
+
if (l_show)
|
85
|
+
{
|
86
|
+
l_show.setAttributeNS(null, 'visibility', 'visible');
|
87
|
+
}
|
88
|
+
}
|
89
|
+
|
60
90
|
// The chart needs to fill in the following options
|
61
91
|
// axurl , response will either do noop/full/delta replacement
|
62
92
|
function SvgAjaxUpdate()
|
@@ -11,6 +11,7 @@ require 'gerbilcharts/surfaces/graph_element'
|
|
11
11
|
require 'gerbilcharts/surfaces/surface'
|
12
12
|
require 'gerbilcharts/surfaces/panel'
|
13
13
|
require 'gerbilcharts/surfaces/legend'
|
14
|
+
require 'gerbilcharts/surfaces/detailed_legend'
|
14
15
|
require 'gerbilcharts/surfaces/title_panel'
|
15
16
|
require 'gerbilcharts/surfaces/axis'
|
16
17
|
require 'gerbilcharts/surfaces/vertical_axis'
|
@@ -26,6 +26,11 @@ class AreaSurface < Surface
|
|
26
26
|
ry = parent.modelgroup.effective_range_y(range_options_y)
|
27
27
|
|
28
28
|
|
29
|
+
# any filters ?
|
30
|
+
if parent.get_global_option(:filter,false)
|
31
|
+
g.curr_win.add_options({:filter => "url(##{parent.get_global_option(:filter,false)})" })
|
32
|
+
end
|
33
|
+
|
29
34
|
# ajax if used
|
30
35
|
if parent.usesAjax?
|
31
36
|
set_ajaxSurfaceContext(rx.rmax,ry.rmax,"AREA")
|
@@ -24,6 +24,12 @@ class BarSurface < Surface
|
|
24
24
|
parent.modelgroup.empty_caption,{"text-anchor" => "middle"})
|
25
25
|
return
|
26
26
|
end
|
27
|
+
|
28
|
+
# any filters ?
|
29
|
+
if parent.get_global_option(:filter,false)
|
30
|
+
g.curr_win.add_options({:filter => "url(##{parent.get_global_option(:filter,false)})" })
|
31
|
+
end
|
32
|
+
|
27
33
|
|
28
34
|
# see if the element spacing or width need to be adjusted to fit
|
29
35
|
nmodels = parent.modelgroup.count
|
@@ -14,11 +14,17 @@ class Legend < GraphElement
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def int_render(g)
|
17
|
+
|
18
|
+
w=g.newwin("legendpanel_mini")
|
19
|
+
g.setactivewindow(w)
|
20
|
+
|
17
21
|
# count determines the bounds
|
18
22
|
@bounds.bottom = @bounds.top + 15 * parent.modelgroup.count
|
19
23
|
g.rectangle_r(@bounds, {:class => @class})
|
20
24
|
|
21
|
-
|
25
|
+
# toggle detail/mini legend
|
26
|
+
g.rectangle(@bounds.left-5,@bounds.top,5,5, {:href => "javascript:void(0);",
|
27
|
+
:onclick => "showDetailedLegend();" })
|
22
28
|
|
23
29
|
rbox = Rect.new
|
24
30
|
rbox.initfrom(@bounds)
|
@@ -33,7 +39,7 @@ class Legend < GraphElement
|
|
33
39
|
opts = { :class => "legendtext" }
|
34
40
|
opts.merge!(:onmouseover => "OpacityDown(evt)", :onmouseout => "OpacityUp(evt)")
|
35
41
|
opts.store(:gerbiltooltip1, mod.name)
|
36
|
-
opts.store(:gerbiltooltip2, "
|
42
|
+
opts.store(:gerbiltooltip2, "Latest Value = #{mod.latest_val}")
|
37
43
|
|
38
44
|
g.rectangle_r(rbox, :id => "item#{i}")
|
39
45
|
g.textout(rbox.right+5, rbox.bottom-2, mod.name,opts)
|
@@ -42,6 +48,8 @@ class Legend < GraphElement
|
|
42
48
|
rbox.bottom = rbox.top+10
|
43
49
|
|
44
50
|
end
|
51
|
+
|
52
|
+
g.setactivewindow
|
45
53
|
|
46
54
|
end
|
47
55
|
|
@@ -5,7 +5,7 @@ class PieSurface < Surface
|
|
5
5
|
|
6
6
|
MIN_INSIDE_LABEL_ANGLE = 8 # do not draw outer label for small angles
|
7
7
|
MIN_OUTSIDE_LABEL_ANGLE = 3 # do not draw inner percentages (pie slice) for small angles
|
8
|
-
|
8
|
+
OUTER_OFFSET_X = 10 # x - distance offset from pie boundary
|
9
9
|
OUTER_OFFSET_Y = 10 # y - y offset from pie boundary
|
10
10
|
LEFT_LABEL_OFFSET = 30 # labels on the left of the PIE offset by this (90-270 deg)
|
11
11
|
|
@@ -22,23 +22,21 @@ class PieSurface < Surface
|
|
22
22
|
|
23
23
|
# bail out of empty models quickly
|
24
24
|
if parent.modelgroup.empty?
|
25
|
-
|
25
|
+
g.textout(@bounds.left + @bounds.width/2, @bounds.height/2,
|
26
26
|
parent.modelgroup.empty_caption,{"text-anchor" => "middle"})
|
27
27
|
return
|
28
|
-
|
29
|
-
|
28
|
+
end
|
30
29
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
30
|
+
# any filters ?
|
31
|
+
if parent.get_global_option(:filter,false)
|
32
|
+
g.curr_win.add_options({:filter => "url(##{parent.get_global_option(:filter,false)})" })
|
33
|
+
end
|
35
34
|
|
36
35
|
# compute totals
|
37
36
|
y_total = 0
|
38
37
|
parent.modelgroup.each_model_with_index do | mod, i|
|
39
38
|
y_total = y_total + mod.latest_val
|
40
39
|
end
|
41
|
-
|
42
40
|
|
43
41
|
radius = @bounds.height * 0.35
|
44
42
|
radius_label = radius + 10
|
@@ -71,37 +69,46 @@ class PieSurface < Surface
|
|
71
69
|
if parent.get_global_option(:auto_tooltips,false)
|
72
70
|
opts.merge!(:onmouseover => "OpacityDown(evt)", :onmouseout => "OpacityUp(evt)")
|
73
71
|
opts.store(:gerbiltooltip1, mod.name)
|
74
|
-
opts.store(:gerbiltooltip2, "Val = #{mod.
|
72
|
+
opts.store(:gerbiltooltip2, "Val = #{mod.latest_formatted_val}")
|
75
73
|
end
|
76
74
|
opts.merge!(:href => mod.href) if mod.hasHref?
|
77
75
|
|
78
|
-
# draw
|
76
|
+
# draw a circle if there is only one data
|
77
|
+
if (mod_angle >= 360)
|
78
|
+
g.addshape(GerbilCharts::SVGDC::SVGCircle.new(cx,cy,radius),opts)
|
79
|
+
end
|
80
|
+
|
81
|
+
# draw the slice
|
79
82
|
g.addshape(GerbilCharts::SVGDC::SVGArc.new(cx,cy,radius,radius,
|
80
83
|
current_pos_x,current_pos_y,
|
81
84
|
new_pos_x,new_pos_y,mod_angle),
|
82
85
|
opts)
|
83
86
|
|
84
87
|
if(percent >= MIN_OUTSIDE_LABEL_ANGLE)
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
g.textout( label_pos_x, label_pos_y, "#{mod.
|
88
|
+
if(tot_angle > 270)
|
89
|
+
if(label_pos_x > cx ) && (label_pos_y > cy )
|
90
|
+
g.textout( label_pos_x, label_pos_y, "#{mod.latest_formatted_val}", :class => 'elementlabel')
|
91
|
+
g.textout(label_pos_x,label_pos_y+OUTER_OFFSET_Y, "#{mod.name}", :class => 'elementlabel' )
|
92
|
+
else
|
93
|
+
g.textout( label_pos_x+OUTER_OFFSET_X, label_pos_y, "#{mod.latest_formatted_val}", :class => 'elementlabel' )
|
94
|
+
g.textout( label_pos_x+OUTER_OFFSET_X, label_pos_y+OUTER_OFFSET_Y, "#{mod.name}", :class => 'elementlabel' )
|
95
|
+
end
|
96
|
+
elsif(label_pos_x > cx ) && (label_pos_y > cy)
|
97
|
+
g.textout( label_pos_x, label_pos_y, "#{mod.latest_formatted_val}", :class => 'elementlabel' )
|
95
98
|
g.textout( label_pos_x, label_pos_y+OUTER_OFFSET_Y, "#{mod.name}", :class => 'elementlabel' )
|
96
|
-
|
97
|
-
g.textout( label_pos_x-LEFT_LABEL_OFFSET, label_pos_y, "#{mod.
|
99
|
+
else
|
100
|
+
g.textout( label_pos_x-LEFT_LABEL_OFFSET, label_pos_y, "#{mod.latest_formatted_val}", :class => 'elementlabel' )
|
98
101
|
g.textout( label_pos_x-LEFT_LABEL_OFFSET, label_pos_y+OUTER_OFFSET_Y, "#{mod.name}", :class => 'elementlabel' )
|
99
|
-
|
100
|
-
|
102
|
+
end
|
103
|
+
end
|
101
104
|
|
102
105
|
|
103
|
-
if(percent > MIN_INSIDE_LABEL_ANGLE)
|
104
|
-
|
106
|
+
if(percent > MIN_INSIDE_LABEL_ANGLE)
|
107
|
+
if(tot_angle > 270)
|
108
|
+
g.textout(percent_pos_x,percent_pos_y+15, "#{percent}%", :class => 'elementvalue')
|
109
|
+
else
|
110
|
+
g.textout(percent_pos_x,percent_pos_y, "#{percent}%", :class => 'elementvalue')
|
111
|
+
end
|
105
112
|
end
|
106
113
|
|
107
114
|
current_pos_x = new_pos_x
|
data/lib/gerbilcharts/svgdc.rb
CHANGED
@@ -74,7 +74,7 @@ class SVGDC
|
|
74
74
|
def add_javascriptfile(jsfile_in)
|
75
75
|
return unless jsfile_in
|
76
76
|
jsfile=jsfile_in.gsub(/^inline:/,'')
|
77
|
-
if jsfile.length <
|
77
|
+
if jsfile.length < jsfile_in.length
|
78
78
|
@svg_javascript ||= ""
|
79
79
|
@svg_javascript << get_file_content(jsfile)
|
80
80
|
else
|
data/lib/gerbilcharts/version.rb
CHANGED
data/test/test_bar.rb
CHANGED
@@ -12,7 +12,7 @@ class TestBar < Test::Unit::TestCase
|
|
12
12
|
modelgroup = GerbilCharts::Models::SimpleTimeSeriesModelGroup.new(
|
13
13
|
:title => "Sales figures",
|
14
14
|
:timeseries => (1..6).collect { |month| Time.local(2008,month) },
|
15
|
-
:models => [ ["Bruce", 1, 10, 18, 28, 80,
|
15
|
+
:models => [ ["Bruce", 1, 10, 18, 28, 80, 140],
|
16
16
|
["Rex" , 112,22, 45, 70, 218, 309],
|
17
17
|
["Sharmila", 112,22, 45, 70, 218, 245],
|
18
18
|
["Wasim", 112,22, 45, 70, 218, 145],
|
@@ -27,8 +27,9 @@ class TestBar < Test::Unit::TestCase
|
|
27
27
|
]
|
28
28
|
)
|
29
29
|
mychart = GerbilCharts::Charts::BarChart.new( :width => 550, :height => 200,
|
30
|
-
:style => 'brushmetal.css', :auto_tooltips => true ,
|
31
|
-
:javascripts =>
|
30
|
+
:style => 'inline:brushmetal.css', :auto_tooltips => true ,
|
31
|
+
:javascripts => ['/tmp/gerbil.js', '/tmp/prototype.js'],
|
32
|
+
:filter => 'LikeButton'
|
32
33
|
)
|
33
34
|
mychart.modelgroup=modelgroup
|
34
35
|
mychart.render('/tmp/bar_monthly_sales.svg')
|
data/test/test_lines.rb
CHANGED
@@ -35,7 +35,9 @@ class TestLines < Test::Unit::TestCase
|
|
35
35
|
# test a line chart
|
36
36
|
def test_line_1
|
37
37
|
|
38
|
-
mychart = GerbilCharts::Charts::AreaChart.new( :width => 450, :height => 250,
|
38
|
+
mychart = GerbilCharts::Charts::AreaChart.new( :width => 450, :height => 250,
|
39
|
+
:javascripts => ['inline:/tmp/gerbil.js' ],
|
40
|
+
:auto_tooltips => true, :style => 'inline:brushmetal.css')
|
39
41
|
mychart.setmodelgroup(@modgroup)
|
40
42
|
mychart.render('/tmp/sq_linechart1.svg')
|
41
43
|
|
data/test/test_noob.rb
CHANGED
@@ -49,18 +49,19 @@ class TestChartsNoob < Test::Unit::TestCase
|
|
49
49
|
|
50
50
|
modelgroup = GerbilCharts::Models::GraphModelGroup.new( "External Traffic")
|
51
51
|
modelgroup.add model2
|
52
|
-
modelgroup.add model1
|
52
|
+
# modelgroup.add model1
|
53
53
|
|
54
54
|
mychart.modelgroup=modelgroup
|
55
55
|
mychart.render('/tmp/n_daily_traffic.svg')
|
56
56
|
|
57
57
|
# demo resuses the model in a different view (an area chart this time)
|
58
|
-
myareachart = GerbilCharts::Charts::AreaChart.new( :width => 450, :height => 200, :style => 'brushmetal.css',
|
59
|
-
|
58
|
+
myareachart = GerbilCharts::Charts::AreaChart.new( :width => 450, :height => 200, :style => 'inline:brushmetal.css',
|
59
|
+
:scaling_y => :auto, :auto_tooltips => true ,
|
60
|
+
:javascripts => ['/tmp/gerbil.js' , '/tmp/prototype.js' ],
|
61
|
+
:filter => 'LikeButton' )
|
60
62
|
myareachart.modelgroup=modelgroup
|
61
63
|
myareachart.render('/tmp/n_daily_traffic_area.svg')
|
62
64
|
|
63
|
-
|
64
65
|
# demo to reuse the model ina bar
|
65
66
|
mybarchart = GerbilCharts::Charts::BarChart.new( :width => 450, :height => 200, :style => 'brushmetal.css', :auto_tooltips => true)
|
66
67
|
mybarchart.modelgroup=modelgroup
|
data/test/test_pie.rb
CHANGED
@@ -14,26 +14,26 @@ class TestPie < Test::Unit::TestCase
|
|
14
14
|
modelgroup = GerbilCharts::Models::SimpleTimeSeriesModelGroup.new(
|
15
15
|
:title => "Sales figures",
|
16
16
|
:timeseries => (1..6).collect { |month| Time.local(2008,month) },
|
17
|
-
:models => [ ["Bruce", 1, 10, 18, 28, 80,
|
18
|
-
["Rex" , 112,22, 45, 70, 218,
|
19
|
-
|
20
|
-
["Wasim", 112,22, 45, 70, 218, 145],
|
21
|
-
|
22
|
-
["Vipin", 145,112, 22, 45, 18, 70],
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
17
|
+
:models => [ ["Bruce", 1, 10, 18, 28, 80, 1340.7890],
|
18
|
+
["Rex" , 112,22, 45, 70, 218, 3098.98]
|
19
|
+
# ["Sharmila", 112,22, 45, 70, 218, 245]
|
20
|
+
#["Wasim", 112,22, 45, 70, 218, 145],
|
21
|
+
# ["Buzo" , 0, 23, 25, 40, 18, 59],
|
22
|
+
#["Vipin", 145,112, 22, 45, 18, 70],
|
23
|
+
# ["label", 145,112, 22, 45, 18, 240],
|
24
|
+
# ["9th item ", 145,112, 22, 45, 18, 45],
|
25
|
+
# ["Others ", 145,112, 22, 45, 18, 15],
|
26
|
+
# ["VIVEK", 145,112, 22, 45, 18, 170]
|
27
27
|
]
|
28
28
|
)
|
29
29
|
|
30
30
|
mychart = GerbilCharts::Charts::PieChart.new( :width => 350, :height => 200,
|
31
|
-
:style => 'brushmetal.css', :auto_tooltips => true ,
|
32
|
-
:javascripts =>
|
31
|
+
:style => 'inline:brushmetal.css', :auto_tooltips => true ,
|
32
|
+
:javascripts => ['/tmp/gerbil.js' , '/tmp/prototype.js' ],
|
33
33
|
:filter => 'LikeButton'
|
34
34
|
)
|
35
35
|
mychart.modelgroup=modelgroup
|
36
|
-
mychart.render(
|
36
|
+
mychart.render("/tmp/pie_monthly_sales.svg")
|
37
37
|
end
|
38
38
|
|
39
39
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gerbilcharts
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vivek Rajagopalan
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-12-01 00:00:00 +05:30
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|