simple_charts 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/simple_charts.rb +29 -17
- data/lib/simple_charts/version.rb +1 -1
- metadata +3 -3
data/lib/simple_charts.rb
CHANGED
@@ -3,14 +3,13 @@ require 'simple_charts/version'
|
|
3
3
|
module SimpleCharts
|
4
4
|
class Chart
|
5
5
|
|
6
|
-
def
|
7
|
-
|
6
|
+
def create_doughnut_paths(data, opts)
|
8
7
|
total = data.inject(:+)
|
9
8
|
segments = data.map{ |val| 360 * val / total }
|
10
9
|
centroid = opts[:width] / 2
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
svg_padding = 5
|
11
|
+
centroid_padding = opts[:centroid_padding] || 0
|
12
|
+
radius = centroid - svg_padding
|
14
13
|
end_angle = 0
|
15
14
|
paths = []
|
16
15
|
|
@@ -18,12 +17,28 @@ module SimpleCharts
|
|
18
17
|
start_angle = end_angle
|
19
18
|
end_angle = start_angle + segment
|
20
19
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
20
|
+
outer_edge_start_x = (centroid + radius * Math.cos(Math::PI * start_angle / 180)).round.to_s
|
21
|
+
outer_edge_start_y = (centroid + radius * Math.sin(Math::PI * start_angle / 180)).round.to_s
|
22
|
+
outer_edge_end_x = (centroid + radius * Math.cos(Math::PI * end_angle / 180)).round.to_s
|
23
|
+
outer_edge_end_y = (centroid + radius * Math.sin(Math::PI * end_angle / 180)).round.to_s
|
24
|
+
inner_edge_end_x = (centroid + centroid_padding * Math.cos(Math::PI * end_angle / 180)).round.to_s
|
25
|
+
inner_edge_end_y = (centroid + centroid_padding * Math.sin(Math::PI * end_angle / 180)).round.to_s
|
26
|
+
inner_edge_start_x = (centroid + centroid_padding * Math.cos(Math::PI * start_angle / 180)).round.to_s
|
27
|
+
inner_edge_start_y = (centroid + centroid_padding * Math.sin(Math::PI * start_angle / 180)).round.to_s
|
28
|
+
|
29
|
+
# move to start of outer arc
|
30
|
+
path = 'M' + outer_edge_start_x + ',' + outer_edge_start_y
|
31
|
+
|
32
|
+
# arc to outer edge of segment
|
33
|
+
path += ' A ' + radius.to_s + ',' + radius.to_s + ' 0 ' + ((end_angle - start_angle > 180) ? '1' : '0') + ' 1 ' + outer_edge_end_x + ',' + outer_edge_end_y
|
34
|
+
|
35
|
+
# line to inner edge of segment
|
36
|
+
path += ' L ' + inner_edge_end_x + ',' + inner_edge_end_y
|
37
|
+
|
38
|
+
# arc to inner other edge of segment
|
39
|
+
path += ' A ' + centroid_padding.to_s + ',' + centroid_padding.to_s + ' 0 ' + ((end_angle - start_angle > 180) ? '1' : '0') + ' 0 ' + inner_edge_start_x + ',' + inner_edge_start_y + ' z'
|
25
40
|
|
26
|
-
paths <<
|
41
|
+
paths << path
|
27
42
|
end
|
28
43
|
|
29
44
|
paths
|
@@ -32,13 +47,10 @@ module SimpleCharts
|
|
32
47
|
def render(type, data, opts)
|
33
48
|
svg = "<svg width='#{opts[:width]}' height='#{opts[:height]}' id='#{opts[:id]}' xmlns='http://www.w3.org/2000/svg'>"
|
34
49
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
end
|
40
|
-
else
|
41
|
-
# error
|
50
|
+
if type == 'pie' || type == 'doughnut'
|
51
|
+
create_doughnut_paths(data, opts).each_with_index do |path, index|
|
52
|
+
svg += "<path d='#{path}' id='#{opts[:id]}-path-#{index}'></path>"
|
53
|
+
end
|
42
54
|
end
|
43
55
|
|
44
56
|
svg + '</svg>'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_charts
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -69,7 +69,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
69
69
|
version: '0'
|
70
70
|
segments:
|
71
71
|
- 0
|
72
|
-
hash: -
|
72
|
+
hash: -649686454733890820
|
73
73
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
74
74
|
none: false
|
75
75
|
requirements:
|
@@ -78,7 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
78
78
|
version: '0'
|
79
79
|
segments:
|
80
80
|
- 0
|
81
|
-
hash: -
|
81
|
+
hash: -649686454733890820
|
82
82
|
requirements: []
|
83
83
|
rubyforge_project:
|
84
84
|
rubygems_version: 1.8.24
|