easyfsf 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.DS_Store +0 -0
- data/.gitignore +4 -0
- data/.rspec +1 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +4 -0
- data/README +22 -0
- data/Rakefile +5 -0
- data/easyfsf.gemspec +24 -0
- data/lib/easyfsf.rb +312 -0
- data/lib/easyfsf/application_helper.rb +3 -0
- data/lib/easyfsf/version.rb +3 -0
- data/lib/generators/easyfsf/.DS_Store +0 -0
- data/lib/generators/easyfsf/easyfsf_generator.rb +15 -0
- data/lib/generators/easyfsf/templates/.DS_Store +0 -0
- data/lib/generators/easyfsf/templates/app/.DS_Store +0 -0
- data/lib/generators/easyfsf/templates/app/assets/javascripts/.DS_Store +0 -0
- data/lib/generators/easyfsf/templates/app/assets/javascripts/fusion_charts.js +401 -0
- data/lib/generators/easyfsf/templates/public/.DS_Store +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/.DS_Store +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/.svn/all-wcprops +5 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/.svn/entries +31 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.DS_Store +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/all-wcprops +137 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/entries +776 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/prop-base/FCF_Area2D.swf.svn-base +5 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/prop-base/FCF_Bar2D.swf.svn-base +5 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/prop-base/FCF_Candlestick.swf.svn-base +5 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/prop-base/FCF_Column2D.swf.svn-base +5 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/prop-base/FCF_Column3D.swf.svn-base +5 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/prop-base/FCF_Doughnut2D.swf.svn-base +5 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/prop-base/FCF_Funnel.swf.svn-base +5 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/prop-base/FCF_Gantt.swf.svn-base +5 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/prop-base/FCF_Line.swf.svn-base +5 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/prop-base/FCF_MSArea2D.swf.svn-base +5 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/prop-base/FCF_MSBar2D.swf.svn-base +5 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/prop-base/FCF_MSColumn2D.swf.svn-base +5 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/prop-base/FCF_MSColumn2DLineDY.swf.svn-base +5 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/prop-base/FCF_MSColumn3D.swf.svn-base +5 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/prop-base/FCF_MSColumn3DLineDY.swf.svn-base +5 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/prop-base/FCF_MSLine.swf.svn-base +5 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/prop-base/FCF_Pie2D.swf.svn-base +5 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/prop-base/FCF_Pie3D.swf.svn-base +5 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/prop-base/FCF_StackedArea2D.swf.svn-base +5 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/prop-base/FCF_StackedBar2D.swf.svn-base +5 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/prop-base/FCF_StackedColumn2D.swf.svn-base +5 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/prop-base/FCF_StackedColumn3D.swf.svn-base +5 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/text-base/FCF_Area2D.swf.svn-base +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/text-base/FCF_Bar2D.swf.svn-base +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/text-base/FCF_Candlestick.swf.svn-base +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/text-base/FCF_Column2D.swf.svn-base +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/text-base/FCF_Column3D.swf.svn-base +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/text-base/FCF_Doughnut2D.swf.svn-base +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/text-base/FCF_Funnel.swf.svn-base +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/text-base/FCF_Gantt.swf.svn-base +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/text-base/FCF_Line.swf.svn-base +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/text-base/FCF_MSArea2D.swf.svn-base +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/text-base/FCF_MSBar2D.swf.svn-base +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/text-base/FCF_MSColumn2D.swf.svn-base +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/text-base/FCF_MSColumn2DLineDY.swf.svn-base +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/text-base/FCF_MSColumn3D.swf.svn-base +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/text-base/FCF_MSColumn3DLineDY.swf.svn-base +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/text-base/FCF_MSLine.swf.svn-base +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/text-base/FCF_Pie2D.swf.svn-base +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/text-base/FCF_Pie3D.swf.svn-base +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/text-base/FCF_StackedArea2D.swf.svn-base +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/text-base/FCF_StackedBar2D.swf.svn-base +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/text-base/FCF_StackedColumn2D.swf.svn-base +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/.svn/text-base/FCF_StackedColumn3D.swf.svn-base +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/FCF_Area2D.swf +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/FCF_Bar2D.swf +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/FCF_Candlestick.swf +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/FCF_Column2D.swf +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/FCF_Column3D.swf +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/FCF_Doughnut2D.swf +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/FCF_Funnel.swf +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/FCF_Gantt.swf +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/FCF_Line.swf +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/FCF_MSArea2D.swf +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/FCF_MSBar2D.swf +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/FCF_MSColumn2D.swf +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/FCF_MSColumn2DLineDY.swf +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/FCF_MSColumn3D.swf +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/FCF_MSColumn3DLineDY.swf +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/FCF_MSLine.swf +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/FCF_Pie2D.swf +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/FCF_Pie3D.swf +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/FCF_StackedArea2D.swf +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/FCF_StackedBar2D.swf +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/FCF_StackedColumn2D.swf +0 -0
- data/lib/generators/easyfsf/templates/public/FusionChartsFree/Charts/FCF_StackedColumn3D.swf +0 -0
- data/master +0 -0
- data/spec/easyfsf/easyfsf_spec.rb +13 -0
- data/spec/spec_helper.rb +4 -0
- metadata +162 -0
data/.DS_Store
ADDED
Binary file
|
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
data/README
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Simplize using Fusionchartfree for ruby on rails
|
2
|
+
|
3
|
+
|
4
|
+
First you should generate swf files
|
5
|
+
|
6
|
+
rails g easyfsf
|
7
|
+
|
8
|
+
|
9
|
+
and then you can render chart by using helper method
|
10
|
+
|
11
|
+
example
|
12
|
+
|
13
|
+
|
14
|
+
<%= render_sm_chart("a", "Pie2D", ['a','b','c'], [1,2,3]) %>
|
15
|
+
<%= render_sm_chart("b", "Column3D", ['a','b','c'], [{:seriesName => "se1", :color => "FF0000",:value_list => [1,2,3]}, {:seriesName => "se2", :color => "F660AB", :value_list => [3,4,5]}]) %>
|
16
|
+
|
17
|
+
|
18
|
+
if you want better example including some images, visit http://zerohun.wordpress.com/2012/01/06/easyfsf/
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
|
data/Rakefile
ADDED
data/easyfsf.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "easyfsf/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "easyfsf"
|
7
|
+
s.version = Easyfsf::VERSION
|
8
|
+
s.authors = ["Younghun Choi"]
|
9
|
+
s.email = ["choi0hun@gmail.com"]
|
10
|
+
s.homepage = "http://zerohun.wordpress.com/2012/01/06/easyfsf/"
|
11
|
+
s.summary = "Simplie using Fusion chart free for ruby on rails"
|
12
|
+
s.description = "one helper method render chart"
|
13
|
+
|
14
|
+
s.rubyforge_project = "easyfsf"
|
15
|
+
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
|
22
|
+
s.add_development_dependency "rails", "~> 3.0.0"
|
23
|
+
s.add_development_dependency "rspec"
|
24
|
+
end
|
data/lib/easyfsf.rb
ADDED
@@ -0,0 +1,312 @@
|
|
1
|
+
require "easyfsf/version"
|
2
|
+
require "easyfsf/application_helper" if defined? Rails
|
3
|
+
require "builder"
|
4
|
+
|
5
|
+
|
6
|
+
module Easyfsf
|
7
|
+
|
8
|
+
#To render single chart or multi chart, call <tt>render_sm_chart</tt>
|
9
|
+
#Depends on parameter it render single data chart or multi data chart
|
10
|
+
#You can use this method as helper
|
11
|
+
#
|
12
|
+
#<%= render_sm_chart("a", "Pie2D", ['a','b','c'], [1,2,3]) %>
|
13
|
+
#
|
14
|
+
#<%= render_sm_chart("b", "Column3D", ['a','b','c'], [{:seriesName => "se1", :color => "FF0000",:value_list => [1,2,3]}, {:seriesName => "se2", :color => "F660AB", :value_list => [3,4,5]}]) %>
|
15
|
+
#<%= render_sm_chart("b", "Column3D", ['a','b','c'], [{:seriesName => "se1", :color => "FF0000",:value_list => [1,2,3]}, {:seriesName => "se2", :color => "F660AB", :value_list => [3,4,5]}],{}, 500, 400, true) %>
|
16
|
+
#
|
17
|
+
#for detail infomation visit http://zerohun.wordpress.com/2012/01/06/easyfsf/
|
18
|
+
#for the options parameter visit http://docs.fusioncharts.com/charts/
|
19
|
+
|
20
|
+
def render_sm_chart(chart_id, chart_type, category, datasets, options = {}, chart_width = 700, chart_height = 500, show_total = false)
|
21
|
+
|
22
|
+
options = options.clone if options.present?
|
23
|
+
category = FCFInitializer.standardize_category(category)
|
24
|
+
datasets = FCFInitializer.standardize_datasets(datasets)
|
25
|
+
|
26
|
+
if options[:skipCategory].present?
|
27
|
+
category = FCFInitializer.skip_category(category, 10)
|
28
|
+
options.delete :skipCategory
|
29
|
+
end
|
30
|
+
|
31
|
+
isMultiChart = datasets.length > 1
|
32
|
+
chart_swf = FCFInitializer.get_swf_file_name(chart_type, isMultiChart)
|
33
|
+
options = FCFInitializer.get_default_option.merge(options)
|
34
|
+
chart_html = ""
|
35
|
+
if show_total == true
|
36
|
+
chart_html << "<div id=#{chart_id}Div_total><br />"
|
37
|
+
datasets.each do |dataset|
|
38
|
+
total = 0
|
39
|
+
dataset[:value_list].each do |value|
|
40
|
+
total += value
|
41
|
+
end
|
42
|
+
chart_html << "<p>Total #{dataset[:seriesName]} : #{total}</p>"
|
43
|
+
end
|
44
|
+
chart_html << "<br /></div>"
|
45
|
+
end
|
46
|
+
xmlString = FCFChartXmlBuilder.smchart_xml(category, datasets, options)
|
47
|
+
chart_html << FCFRenderer.render_chart("/FusionChartsFree/Charts/#{chart_swf}", xmlString, chart_id, chart_width, chart_height)
|
48
|
+
return chart_html.html_safe
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
module FCFInitializer
|
54
|
+
#default optinoss
|
55
|
+
DEFAULT_OPTIONS = {
|
56
|
+
:caption => "",
|
57
|
+
:subcaption => "",
|
58
|
+
:lineThickness => "5",
|
59
|
+
:showValues => "0",
|
60
|
+
:formatNumberScale => "0",
|
61
|
+
:anchorRadius => "5",
|
62
|
+
:divLineAlpha => "20" ,
|
63
|
+
:divLineColor => "CC3300",
|
64
|
+
:showAlternateHGridColor => "1",
|
65
|
+
:alternateHGridColor => "CC3300",
|
66
|
+
:rotateNames => "1",
|
67
|
+
:shadowAlpha => "40",
|
68
|
+
:numvdivlines => "5",
|
69
|
+
:chartLeftMargin => "5",
|
70
|
+
:chartRightMargin => "5",
|
71
|
+
:chartTopMargin => "5",
|
72
|
+
:chartBottomMargin => "5",
|
73
|
+
:bgColor => "FFFFFF",
|
74
|
+
:alternateHGridAlpha => "5",
|
75
|
+
:limitsDecimalPrecision => '0',
|
76
|
+
:divLineDecimalPrecision => '0',
|
77
|
+
:decimalPrecision => "0",
|
78
|
+
:yAxisMaxValue => "10",
|
79
|
+
:lineThickness => "2",
|
80
|
+
:anchorRadius => "1"
|
81
|
+
}
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
#to file swf files
|
86
|
+
#chart difinition for rendering single chart
|
87
|
+
ONLY_SINGLE_CHART = ["Pie2D", "Pie3D", "Funnel"]
|
88
|
+
|
89
|
+
#chart difinition for rendering multi chart
|
90
|
+
ONLY_MULTI_CHART = ["StackedArea2D", "StackedBar2D", "StackedColumn2D",
|
91
|
+
"StackedColumn3D", "MSColumn2DLineDY", "MSColumn3DLineDY"]
|
92
|
+
|
93
|
+
#chart difinition for rendering single and multi chart
|
94
|
+
BOTH_CAPABLE_CHART = ["Line", "Area2D", "Bar2D", "Column2D", "Column3D"]
|
95
|
+
@chartIdList = []
|
96
|
+
|
97
|
+
def self.get_default_option
|
98
|
+
DEFAULT_OPTIONS
|
99
|
+
end
|
100
|
+
|
101
|
+
|
102
|
+
def self.get_swf_file_name(chart_type, isMulti)
|
103
|
+
if ONLY_SINGLE_CHART.include? chart_type
|
104
|
+
if isMulti
|
105
|
+
raise ArgumentError, "#{chart_type} can draw only single chart data but it's multichart data"
|
106
|
+
else
|
107
|
+
return "FCF_#{chart_type}.swf"
|
108
|
+
end
|
109
|
+
end
|
110
|
+
if ONLY_MULTI_CHART.include? chart_type
|
111
|
+
if isMulti
|
112
|
+
return "FCF_#{chart_type}.swf"
|
113
|
+
else
|
114
|
+
raise ArgumentError, "#{chart_type} can draw only multichart data but it's singlechart data"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
if BOTH_CAPABLE_CHART.include? chart_type
|
118
|
+
if isMulti
|
119
|
+
return "FCF_MS#{chart_type}.swf"
|
120
|
+
else
|
121
|
+
return "FCF_#{chart_type}.swf"
|
122
|
+
end
|
123
|
+
end
|
124
|
+
raise ArgumentError, "there is no #{chart_type} type"
|
125
|
+
end
|
126
|
+
|
127
|
+
|
128
|
+
def self.standardize_category(category)
|
129
|
+
case check_category_params(category)
|
130
|
+
when :STRING_ARRAY
|
131
|
+
return {:value_list => category.map {|c| c.to_s}}
|
132
|
+
when :HASH
|
133
|
+
return category.clone
|
134
|
+
else
|
135
|
+
raise ArgumentError,
|
136
|
+
"First parameter should be Hash, Array of String or Array of something that can be converted to String"
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
|
141
|
+
def self.standardize_datasets(datasets)
|
142
|
+
case check_datasets_params(datasets)
|
143
|
+
when :NUM_ARRAY
|
144
|
+
return [{:value_list => datasets}]
|
145
|
+
when :HASH_ARRAY
|
146
|
+
clonedDataSets = []
|
147
|
+
datasets.each do |dataset|
|
148
|
+
clonedDataSets << dataset.clone
|
149
|
+
end
|
150
|
+
return clonedDataSets
|
151
|
+
when :HASH
|
152
|
+
return [datasets.clone]
|
153
|
+
else
|
154
|
+
raise ArgumentError,
|
155
|
+
"parameters should be Hash, Array of Hash , Array of Fixum or Array of Float"
|
156
|
+
end
|
157
|
+
end
|
158
|
+
def self.check_category_params(category)
|
159
|
+
if category.is_a? Array
|
160
|
+
return :STRING_ARRAY if category[0].respond_to?(:to_s)
|
161
|
+
end
|
162
|
+
if category.is_a? Hash
|
163
|
+
return :HASH if category[:value_list]
|
164
|
+
end
|
165
|
+
return :SOMETHING_ELSE
|
166
|
+
end
|
167
|
+
|
168
|
+
def self.check_datasets_params(datasets)
|
169
|
+
if datasets.is_a? Array
|
170
|
+
return :NUM_ARRAY if datasets[0].is_a? Fixnum or datasets[0].is_a? Float
|
171
|
+
if datasets[0].is_a? Hash
|
172
|
+
datasets.each_with_index do |dataset, index|
|
173
|
+
raise ArgumentError,
|
174
|
+
"There is a nil value_list in datasets(name: #{dataset[:seriesName]} ,index:#{index})" if dataset[:value_list].blank?
|
175
|
+
end
|
176
|
+
return :HASH_ARRAY
|
177
|
+
end
|
178
|
+
end
|
179
|
+
if datasets.is_a? Hash
|
180
|
+
return :HASH if datasets[:value_list].present?
|
181
|
+
end
|
182
|
+
return :SOMETHING_ELSE
|
183
|
+
end
|
184
|
+
|
185
|
+
#skipSize에 맞춰 category의 value_list를 빈 문자열로 교체합니다.
|
186
|
+
def self.skip_category(category, skipSize)
|
187
|
+
newValueList = category[:value_list].each_with_index.map{ |value,index|
|
188
|
+
next value if (index+1)%(skipSize+1) == 1
|
189
|
+
next ""
|
190
|
+
}
|
191
|
+
return category.merge(:value_list => newValueList)
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
module FCFRenderer
|
196
|
+
#차트의 xml 데이타를 <fusionchatfree />형식으로 나타내어서 javascript 코드에서 파싱해서
|
197
|
+
#차트를 그려줄 수 있게끔 합니다.
|
198
|
+
def self.render_chart(chart_swf, chart_xml, chart_id , chart_width, chart_height)
|
199
|
+
chart_width=chart_width.to_s
|
200
|
+
chart_height=chart_height.to_s
|
201
|
+
htmlString = ""
|
202
|
+
htmlString << "<div id='#{chart_id}Div' class='fusionchart'>\n\t\t\t\tChart.\n\t\t"
|
203
|
+
htmlString << "<fusionchartfree swf='#{chart_swf}' chart_id='#{chart_id}' chart_width='#{chart_width}' chart_height='#{chart_height}' chart_xml='#{chart_xml}' />"
|
204
|
+
htmlString << "</div>"
|
205
|
+
return htmlString
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
module FCFChartXmlBuilder
|
210
|
+
|
211
|
+
# for randomize color
|
212
|
+
@FC_ColorCounter=0;
|
213
|
+
@arr_FCColors=["1941A5", "AFD8F8", "F6BD0F", "8BBA00", "A66EDD", "F984A1",
|
214
|
+
"CCCC00", "999999", "0099CC", "FF0000", "006F00", "0099FF",
|
215
|
+
"FF66CC", "669966", "7C7CB4", "FF9933", "9900FF", "99FFCC",
|
216
|
+
"CCCCFF", "669900"]
|
217
|
+
|
218
|
+
# Generate xml for chart
|
219
|
+
# examples
|
220
|
+
#
|
221
|
+
# for single charts
|
222
|
+
#<graph yAxisName='Sales Figure'
|
223
|
+
# caption='Top 5 Sales Person'
|
224
|
+
# numberPrefix='$'
|
225
|
+
# decimalPrecision='1'
|
226
|
+
# divlinedecimalPrecision='0'
|
227
|
+
# limitsdecimalPrecision='0'>
|
228
|
+
# <set name='Alex' value='25000' color='AFD8F8'/>
|
229
|
+
# <set name='Mark' value='35000' color='F6BD0F'/>
|
230
|
+
# <set name='John' value='31300' color='008E8E'/>
|
231
|
+
#
|
232
|
+
#</graph>
|
233
|
+
#
|
234
|
+
# for multi charts
|
235
|
+
#<graph yAxisName='Sales Figure'
|
236
|
+
# caption='Top 5 Sales Person'
|
237
|
+
# numberPrefix='$'
|
238
|
+
# decimalPrecision='1'
|
239
|
+
# divlinedecimalPrecision='0'
|
240
|
+
# limitsdecimalPrecision='0'>
|
241
|
+
# <categories>
|
242
|
+
# <category name="Jan"/>
|
243
|
+
# <category name="Feb"/>
|
244
|
+
# <category name="Apr"/>
|
245
|
+
# </categories>
|
246
|
+
# <dataset seriesName="Current Year" color="A66EDD">
|
247
|
+
# <set value="1127654"/>
|
248
|
+
# <set value="1226234"/>
|
249
|
+
# <set value="1311565"/>
|
250
|
+
#
|
251
|
+
# </dataset>
|
252
|
+
# <dataset seriesName="Previous Year" color="F6BD0F">
|
253
|
+
# <set value="927654"/>
|
254
|
+
# <set value="1126234"/>
|
255
|
+
# <set value="1111565"/>
|
256
|
+
#
|
257
|
+
# </dataset>
|
258
|
+
#</graph>
|
259
|
+
|
260
|
+
def self.smchart_xml(category, datasets, options = {})
|
261
|
+
if options[:sectionSize].present?
|
262
|
+
category[:value_list] = erase_sections(category[:value_list], options[:sectionSize])
|
263
|
+
options.delete :sectionSize
|
264
|
+
end
|
265
|
+
|
266
|
+
xml = ::Builder::XmlMarkup.new(:indent=>0)
|
267
|
+
#pOptions[:caption] = getCaption(valueDatas)
|
268
|
+
xml.graph(options) do
|
269
|
+
if datasets.length == 1
|
270
|
+
category[:value_list].length.times do |index|
|
271
|
+
dataset = datasets[0]
|
272
|
+
color = category[:color_list].blank? ? "":category[:color_list][index]
|
273
|
+
xml.set(:name => category[:value_list][index],
|
274
|
+
:value => dataset[:value_list][index],
|
275
|
+
:color => color)
|
276
|
+
end
|
277
|
+
else
|
278
|
+
xml.categories do
|
279
|
+
category[:value_list].length.times do |index|
|
280
|
+
xml.category(:name => category[:value_list][index])
|
281
|
+
end
|
282
|
+
end
|
283
|
+
datasets.each do |dataset|
|
284
|
+
dataset[:color] = dataset[:color].blank? ? get_FC_color : dataset[:color]
|
285
|
+
valueList = dataset[:value_list].clone
|
286
|
+
dataset.delete :value_list
|
287
|
+
xml.dataset(dataset) do
|
288
|
+
valueList.each do |value|
|
289
|
+
xml.set(:value => value)
|
290
|
+
end
|
291
|
+
end
|
292
|
+
end
|
293
|
+
end
|
294
|
+
end
|
295
|
+
xmlString = xml.to_s
|
296
|
+
return xmlString[0..xmlString.length - 8]
|
297
|
+
end
|
298
|
+
|
299
|
+
|
300
|
+
|
301
|
+
def self.get_FC_color
|
302
|
+
#Update index
|
303
|
+
@FC_ColorCounter=@FC_ColorCounter+1
|
304
|
+
counter = @FC_ColorCounter % (@arr_FCColors.size)
|
305
|
+
#Return color
|
306
|
+
return @arr_FCColors[counter]
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
310
|
+
end
|
311
|
+
|
312
|
+
|
Binary file
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/rails/app/app_generator'
|
3
|
+
require 'rails/version'
|
4
|
+
|
5
|
+
module Easyfsf
|
6
|
+
class EasyfsfGenerator < Rails::Generators::Base
|
7
|
+
source_root File.expand_path("../templates", __FILE__)
|
8
|
+
def copy_temeplate_files
|
9
|
+
|
10
|
+
directory 'app'
|
11
|
+
directory 'public'
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,401 @@
|
|
1
|
+
/**
|
2
|
+
* FusionCharts: Flash Player detection and Chart embedding.
|
3
|
+
* Version 1.2.3F ( 22 November 2008) - Specialized for FusionChartsFREE
|
4
|
+
* Checking Flash Version >=6 and added updateChartXML() for FREE Charts.
|
5
|
+
* Version: 1.2.3 (1st September, 2008) - Added Fix for % and & characters, scaled dimensions, fixes in to properly handling of double quotes and single quotes in setDataXML() function.
|
6
|
+
* Version: 1.2.2 (10th July, 2008) - Added Fix for % scaled dimensions, fixes in setDataXML() and setDataURL() functions
|
7
|
+
* Version: 1.2.1 (21st December, 2007) - Added setting up Transparent/opaque mode: setTransparent() function
|
8
|
+
* Version: 1.2 (1st November, 2007) - Added FORM fixes for IE
|
9
|
+
* Version: 1.1 (29th June, 2007) - Added Player detection, New conditional fixes for IE
|
10
|
+
*
|
11
|
+
* Morphed from SWFObject (http://blog.deconcept.com/swfobject/) under MIT License:
|
12
|
+
* http://www.opensource.org/licenses/mit-license.php
|
13
|
+
*
|
14
|
+
*/
|
15
|
+
if(typeof infosoftglobal == "undefined") var infosoftglobal = new Object();
|
16
|
+
if(typeof infosoftglobal.FusionChartsUtil == "undefined") infosoftglobal.FusionChartsUtil = new Object();
|
17
|
+
infosoftglobal.FusionCharts = function(swf, id, w, h, debugMode, registerWithJS, c, scaleMode, lang, detectFlashVersion, autoInstallRedirect){
|
18
|
+
if (!document.getElementById) { return; }
|
19
|
+
|
20
|
+
//Flag to see whether data has been set initially
|
21
|
+
this.initialDataSet = false;
|
22
|
+
|
23
|
+
//Create container objects
|
24
|
+
this.params = new Object();
|
25
|
+
this.variables = new Object();
|
26
|
+
this.attributes = new Array();
|
27
|
+
|
28
|
+
//Set attributes for the SWF
|
29
|
+
if(swf) { this.setAttribute('swf', swf); }
|
30
|
+
if(id) { this.setAttribute('id', id); }
|
31
|
+
|
32
|
+
w=w.toString().replace(/\%$/,"%25");
|
33
|
+
if(w) { this.setAttribute('width', w); }
|
34
|
+
h=h.toString().replace(/\%$/,"%25");
|
35
|
+
if(h) { this.setAttribute('height', h); }
|
36
|
+
|
37
|
+
|
38
|
+
//Set background color
|
39
|
+
if(c) { this.addParam('bgcolor', c); }
|
40
|
+
|
41
|
+
//Set Quality
|
42
|
+
this.addParam('quality', 'high');
|
43
|
+
|
44
|
+
//Add scripting access parameter
|
45
|
+
this.addParam('allowScriptAccess', 'always');
|
46
|
+
|
47
|
+
//Pass width and height to be appended as chartWidth and chartHeight
|
48
|
+
this.addVariable('chartWidth', w);
|
49
|
+
this.addVariable('chartHeight', h);
|
50
|
+
|
51
|
+
//Whether in debug mode
|
52
|
+
debugMode = debugMode ? debugMode : 0;
|
53
|
+
this.addVariable('debugMode', debugMode);
|
54
|
+
//Pass DOM ID to Chart
|
55
|
+
this.addVariable('DOMId', id);
|
56
|
+
//Whether to registed with JavaScript
|
57
|
+
registerWithJS = registerWithJS ? registerWithJS : 0;
|
58
|
+
this.addVariable('registerWithJS', registerWithJS);
|
59
|
+
|
60
|
+
//Scale Mode of chart
|
61
|
+
scaleMode = scaleMode ? scaleMode : 'noScale';
|
62
|
+
this.addVariable('scaleMode', scaleMode);
|
63
|
+
|
64
|
+
//Application Message Language
|
65
|
+
lang = lang ? lang : 'EN';
|
66
|
+
this.addVariable('lang', lang);
|
67
|
+
|
68
|
+
//Whether to auto detect and re-direct to Flash Player installation
|
69
|
+
this.detectFlashVersion = detectFlashVersion?detectFlashVersion:1;
|
70
|
+
this.autoInstallRedirect = autoInstallRedirect?autoInstallRedirect:1;
|
71
|
+
|
72
|
+
//Ger Flash Player version
|
73
|
+
this.installedVer = infosoftglobal.FusionChartsUtil.getPlayerVersion();
|
74
|
+
|
75
|
+
if (!window.opera && document.all && this.installedVer.major > 7) {
|
76
|
+
// Only add the onunload cleanup if the Flash Player version supports External Interface and we are in IE
|
77
|
+
infosoftglobal.FusionCharts.doPrepUnload = true;
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
81
|
+
infosoftglobal.FusionCharts.prototype = {
|
82
|
+
setAttribute: function(name, value){
|
83
|
+
this.attributes[name] = value;
|
84
|
+
},
|
85
|
+
getAttribute: function(name){
|
86
|
+
return this.attributes[name];
|
87
|
+
},
|
88
|
+
addParam: function(name, value){
|
89
|
+
this.params[name] = value;
|
90
|
+
},
|
91
|
+
getParams: function(){
|
92
|
+
return this.params;
|
93
|
+
},
|
94
|
+
addVariable: function(name, value){
|
95
|
+
this.variables[name] = value;
|
96
|
+
},
|
97
|
+
getVariable: function(name){
|
98
|
+
return this.variables[name];
|
99
|
+
},
|
100
|
+
getVariables: function(){
|
101
|
+
return this.variables;
|
102
|
+
},
|
103
|
+
getVariablePairs: function(){
|
104
|
+
var variablePairs = new Array();
|
105
|
+
var key;
|
106
|
+
var variables = this.getVariables();
|
107
|
+
for(key in variables){
|
108
|
+
variablePairs.push(key +"="+ variables[key]);
|
109
|
+
}
|
110
|
+
return variablePairs;
|
111
|
+
},
|
112
|
+
getSWFHTML: function() {
|
113
|
+
var swfNode = "";
|
114
|
+
if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) {
|
115
|
+
// netscape plugin architecture
|
116
|
+
swfNode = '<embed wmode="transparent" type="application/x-shockwave-flash" src="'+ this.getAttribute('swf') +'" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" ';
|
117
|
+
swfNode += ' id="'+ this.getAttribute('id') +'" name="'+ this.getAttribute('id') +'" ';
|
118
|
+
var params = this.getParams();
|
119
|
+
for(var key in params){ swfNode += [key] +'="'+ params[key] +'" '; }
|
120
|
+
var pairs = this.getVariablePairs().join("&");
|
121
|
+
if (pairs.length > 0){ swfNode += 'flashvars="'+ pairs +'"'; }
|
122
|
+
swfNode += '/>';
|
123
|
+
} else { // PC IE
|
124
|
+
swfNode = '<object id="'+ this.getAttribute('id') +'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'">';
|
125
|
+
swfNode += '<param name="movie" value="'+ this.getAttribute('swf') +'" />';
|
126
|
+
swfNode += '<param name="wmode" value="transparent">'
|
127
|
+
var params = this.getParams();
|
128
|
+
for(var key in params) {
|
129
|
+
swfNode += '<param name="'+ key +'" value="'+ params[key] +'" />';
|
130
|
+
}
|
131
|
+
var pairs = this.getVariablePairs().join("&");
|
132
|
+
if(pairs.length > 0) {swfNode += '<param name="flashvars" value="'+ pairs +'" />';}
|
133
|
+
swfNode += "</object>";
|
134
|
+
}
|
135
|
+
return swfNode;
|
136
|
+
},
|
137
|
+
setDataURL: function(strDataURL){
|
138
|
+
//This method sets the data URL for the chart.
|
139
|
+
//If being set initially
|
140
|
+
if (this.initialDataSet==false){
|
141
|
+
this.addVariable('dataURL',strDataURL);
|
142
|
+
//Update flag
|
143
|
+
this.initialDataSet = true;
|
144
|
+
}else{
|
145
|
+
//Else, we update the chart data using External Interface
|
146
|
+
//Get reference to chart object
|
147
|
+
var chartObj = infosoftglobal.FusionChartsUtil.getChartObject(this.getAttribute('id'));
|
148
|
+
|
149
|
+
if (!chartObj.setDataURL)
|
150
|
+
{
|
151
|
+
__flash__addCallback(chartObj, "setDataURL");
|
152
|
+
}
|
153
|
+
|
154
|
+
chartObj.setDataURL(strDataURL);
|
155
|
+
}
|
156
|
+
},
|
157
|
+
//This function :
|
158
|
+
//fixes the double quoted attributes to single quotes
|
159
|
+
//Encodes all quotes inside attribute values
|
160
|
+
//Encodes % to %25 and & to %26;
|
161
|
+
encodeDataXML: function(strDataXML){
|
162
|
+
|
163
|
+
var regExpReservedCharacters=["\\$","\\+"];
|
164
|
+
var arrDQAtt=strDataXML.match(/=\s*\".*?\"/g);
|
165
|
+
if (arrDQAtt){
|
166
|
+
for(var i=0;i<arrDQAtt.length;i++){
|
167
|
+
var repStr=arrDQAtt[i].replace(/^=\s*\"|\"$/g,"");
|
168
|
+
repStr=repStr.replace(/\'/g,"%26apos;");
|
169
|
+
var strTo=strDataXML.indexOf(arrDQAtt[i]);
|
170
|
+
var repStrr="='"+repStr+"'";
|
171
|
+
var strStart=strDataXML.substring(0,strTo);
|
172
|
+
var strEnd=strDataXML.substring(strTo+arrDQAtt[i].length);
|
173
|
+
var strDataXML=strStart+repStrr+strEnd;
|
174
|
+
}
|
175
|
+
}
|
176
|
+
|
177
|
+
strDataXML=strDataXML.replace(/\"/g,"%26quot;");
|
178
|
+
strDataXML=strDataXML.replace(/%(?![\da-f]{2}|[\da-f]{4})/ig,"%25");
|
179
|
+
strDataXML=strDataXML.replace(/\&/g,"%26");
|
180
|
+
|
181
|
+
return strDataXML;
|
182
|
+
|
183
|
+
},
|
184
|
+
setDataXML: function(strDataXML){
|
185
|
+
//If being set initially
|
186
|
+
if (this.initialDataSet==false){
|
187
|
+
//This method sets the data XML for the chart INITIALLY.
|
188
|
+
this.addVariable('dataXML',this.encodeDataXML(strDataXML));
|
189
|
+
//Update flag
|
190
|
+
this.initialDataSet = true;
|
191
|
+
}else{
|
192
|
+
//Else, we update the chart data using External Interface
|
193
|
+
//Get reference to chart object
|
194
|
+
var chartObj = infosoftglobal.FusionChartsUtil.getChartObject(this.getAttribute('id'));
|
195
|
+
chartObj.setDataXML(strDataXML);
|
196
|
+
}
|
197
|
+
},
|
198
|
+
setTransparent: function(isTransparent){
|
199
|
+
//Sets chart to transparent mode when isTransparent is true (default)
|
200
|
+
//When no parameter is passed, we assume transparent to be true.
|
201
|
+
if(typeof isTransparent=="undefined") {
|
202
|
+
isTransparent=true;
|
203
|
+
}
|
204
|
+
//Set the property
|
205
|
+
if(isTransparent)
|
206
|
+
this.addParam('WMode', 'transparent');
|
207
|
+
else
|
208
|
+
this.addParam('WMode', 'Opaque');
|
209
|
+
},
|
210
|
+
remove: function(chartId){},
|
211
|
+
|
212
|
+
render: function(elementId){
|
213
|
+
//First check for installed version of Flash Player - we need a minimum of 6
|
214
|
+
if((this.detectFlashVersion==1) && (this.installedVer.major < 6)){
|
215
|
+
if (this.autoInstallRedirect==1){
|
216
|
+
//If we can auto redirect to install the player?
|
217
|
+
var installationConfirm = window.confirm("You need Adobe Flash Player 6 (or above) to view the charts. It is a free and lightweight installation from Adobe.com. Please click on Ok to install the same.");
|
218
|
+
if (installationConfirm){
|
219
|
+
window.location = "http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash";
|
220
|
+
}else{
|
221
|
+
return false;
|
222
|
+
}
|
223
|
+
}else{
|
224
|
+
//Else, do not take an action. It means the developer has specified a message in the DIV (and probably a link).
|
225
|
+
//So, expect the developers to provide a course of way to their end users.
|
226
|
+
//window.alert("You need Adobe Flash Player 8 (or above) to view the charts. It is a free and lightweight installation from Adobe.com. ");
|
227
|
+
return false;
|
228
|
+
}
|
229
|
+
}else{
|
230
|
+
//Render the chart
|
231
|
+
var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId;
|
232
|
+
n.innerHTML = this.getSWFHTML();
|
233
|
+
|
234
|
+
//Added <FORM> compatibility
|
235
|
+
//Check if it's added in Mozilla embed array or if already exits
|
236
|
+
if(!document.embeds[this.getAttribute('id')] && !window[this.getAttribute('id')])
|
237
|
+
window[this.getAttribute('id')]=document.getElementById(this.getAttribute('id'));
|
238
|
+
//or else document.forms[formName/formIndex][chartId]
|
239
|
+
return true;
|
240
|
+
}
|
241
|
+
}
|
242
|
+
}
|
243
|
+
|
244
|
+
/* ---- detection functions ---- */
|
245
|
+
infosoftglobal.FusionChartsUtil.getPlayerVersion = function(){
|
246
|
+
var PlayerVersion = new infosoftglobal.PlayerVersion([0,0,0]);
|
247
|
+
if(navigator.plugins && navigator.mimeTypes.length){
|
248
|
+
var x = navigator.plugins["Shockwave Flash"];
|
249
|
+
if(x && x.description) {
|
250
|
+
PlayerVersion = new infosoftglobal.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."));
|
251
|
+
}
|
252
|
+
}else if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0){
|
253
|
+
//If Windows CE
|
254
|
+
var axo = 1;
|
255
|
+
var counter = 3;
|
256
|
+
while(axo) {
|
257
|
+
try {
|
258
|
+
counter++;
|
259
|
+
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+ counter);
|
260
|
+
PlayerVersion = new infosoftglobal.PlayerVersion([counter,0,0]);
|
261
|
+
} catch (e) {
|
262
|
+
axo = null;
|
263
|
+
}
|
264
|
+
}
|
265
|
+
} else {
|
266
|
+
// Win IE (non mobile)
|
267
|
+
// Do minor version lookup in IE, but avoid Flash Player 6 crashing issues
|
268
|
+
try{
|
269
|
+
var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
|
270
|
+
}catch(e){
|
271
|
+
try {
|
272
|
+
var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
|
273
|
+
PlayerVersion = new infosoftglobal.PlayerVersion([6,0,21]);
|
274
|
+
axo.AllowScriptAccess = "always"; // error if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code)
|
275
|
+
} catch(e) {
|
276
|
+
if (PlayerVersion.major == 6) {
|
277
|
+
return PlayerVersion;
|
278
|
+
}
|
279
|
+
}
|
280
|
+
try {
|
281
|
+
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
|
282
|
+
} catch(e) {}
|
283
|
+
}
|
284
|
+
if (axo != null) {
|
285
|
+
PlayerVersion = new infosoftglobal.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));
|
286
|
+
}
|
287
|
+
}
|
288
|
+
return PlayerVersion;
|
289
|
+
}
|
290
|
+
infosoftglobal.PlayerVersion = function(arrVersion){
|
291
|
+
this.major = arrVersion[0] != null ? parseInt(arrVersion[0]) : 0;
|
292
|
+
this.minor = arrVersion[1] != null ? parseInt(arrVersion[1]) : 0;
|
293
|
+
this.rev = arrVersion[2] != null ? parseInt(arrVersion[2]) : 0;
|
294
|
+
}
|
295
|
+
// ------------ Fix for Out of Memory Bug in IE in FP9 ---------------//
|
296
|
+
/* Fix for video streaming bug */
|
297
|
+
infosoftglobal.FusionChartsUtil.cleanupSWFs = function() {
|
298
|
+
var objects = document.getElementsByTagName("OBJECT");
|
299
|
+
for (var i = objects.length - 1; i >= 0; i--) {
|
300
|
+
objects[i].style.display = 'none';
|
301
|
+
for (var x in objects[i]) {
|
302
|
+
if (typeof objects[i][x] == 'function') {
|
303
|
+
objects[i][x] = function(){};
|
304
|
+
}
|
305
|
+
}
|
306
|
+
}
|
307
|
+
}
|
308
|
+
// Fixes bug in fp9
|
309
|
+
if (infosoftglobal.FusionCharts.doPrepUnload) {
|
310
|
+
if (!infosoftglobal.unloadSet) {
|
311
|
+
infosoftglobal.FusionChartsUtil.prepUnload = function() {
|
312
|
+
__flash_unloadHandler = function(){};
|
313
|
+
__flash_savedUnloadHandler = function(){};
|
314
|
+
window.attachEvent("onunload", infosoftglobal.FusionChartsUtil.cleanupSWFs);
|
315
|
+
}
|
316
|
+
window.attachEvent("onbeforeunload", infosoftglobal.FusionChartsUtil.prepUnload);
|
317
|
+
infosoftglobal.unloadSet = true;
|
318
|
+
}
|
319
|
+
}
|
320
|
+
/* Add document.getElementById if needed (mobile IE < 5) */
|
321
|
+
if (!document.getElementById && document.all) { document.getElementById = function(id) { return document.all[id]; }}
|
322
|
+
/* Add Array.push if needed (ie5) */
|
323
|
+
if (Array.prototype.push == null) { Array.prototype.push = function(item) { this[this.length] = item; return this.length; }}
|
324
|
+
|
325
|
+
/* Function to return Flash Object from ID */
|
326
|
+
infosoftglobal.FusionChartsUtil.getChartObject = function(id)
|
327
|
+
{
|
328
|
+
var chartRef=null;
|
329
|
+
if (navigator.appName.indexOf("Microsoft Internet")==-1) {
|
330
|
+
if (document.embeds && document.embeds[id])
|
331
|
+
chartRef = document.embeds[id];
|
332
|
+
else
|
333
|
+
chartRef = window.document[id];
|
334
|
+
}
|
335
|
+
else {
|
336
|
+
chartRef = window[id];
|
337
|
+
}
|
338
|
+
if (!chartRef)
|
339
|
+
chartRef = document.getElementById(id);
|
340
|
+
|
341
|
+
return chartRef;
|
342
|
+
}
|
343
|
+
/*
|
344
|
+
Function to update chart's data at client side (FOR FusionCharts vFREE and 2.x
|
345
|
+
*/
|
346
|
+
infosoftglobal.FusionChartsUtil.updateChartXML = function(chartId, strXML){
|
347
|
+
//Get reference to chart object
|
348
|
+
var chartObj = infosoftglobal.FusionChartsUtil.getChartObject(chartId);
|
349
|
+
//Set dataURL to null
|
350
|
+
chartObj.SetVariable("_root.dataURL","");
|
351
|
+
//Set the flag
|
352
|
+
chartObj.SetVariable("_root.isNewData","1");
|
353
|
+
//Set the actual data
|
354
|
+
chartObj.SetVariable("_root.newData",strXML);
|
355
|
+
//Go to the required frame
|
356
|
+
chartObj.TGotoLabel("/", "JavaScriptHandler");
|
357
|
+
}
|
358
|
+
|
359
|
+
/* Aliases for easy usage */
|
360
|
+
var getChartFromId = infosoftglobal.FusionChartsUtil.getChartObject;
|
361
|
+
var updateChartXML = infosoftglobal.FusionChartsUtil.updateChartXML;
|
362
|
+
var FusionCharts = infosoftglobal.FusionCharts;
|
363
|
+
|
364
|
+
/*
|
365
|
+
* <fusionchartfree> 엘리먼트를 파싱해서 attibute에 맞춰 차트를 생성합니다.
|
366
|
+
*/
|
367
|
+
|
368
|
+
function render_element(element){
|
369
|
+
var $chart = $(element)
|
370
|
+
var chart_id = $chart.attr("chart_id");
|
371
|
+
var chart_swf = $chart.attr("swf")
|
372
|
+
var chart_width = $chart.attr("chart_width");
|
373
|
+
var chart_height = $chart.attr("chart_height");
|
374
|
+
var chart_xml = $chart.attr("chart_xml");
|
375
|
+
var chart_object = new FusionCharts(chart_swf, chart_id, chart_width, chart_height, "0", "0");
|
376
|
+
var div_id_ar = []
|
377
|
+
div_id_ar[div_id_ar.length] = chart_id
|
378
|
+
div_id_ar[div_id_ar.length] = 'Div'
|
379
|
+
var div_id_str = div_id_ar.join("")
|
380
|
+
chart_object.setDataXML(chart_xml);
|
381
|
+
chart_object.render(div_id_str)
|
382
|
+
}
|
383
|
+
$(document).ready(function(){
|
384
|
+
var chart_list = $("fusionchartfree");
|
385
|
+
var chart_options = {};
|
386
|
+
|
387
|
+
chart_list.each(function(index, element){
|
388
|
+
var chart_id = $(element).attr('id');
|
389
|
+
var chart_xml = $(element).attr('chart_xml');
|
390
|
+
var attributes = chart_xml.attributes
|
391
|
+
chart_options[chart_id] = ""
|
392
|
+
for(var key in attributes){
|
393
|
+
chart_options[chart_id] += ( attributes[key].name + "="+ attributes[key].value + ';')
|
394
|
+
}
|
395
|
+
render_element(element);
|
396
|
+
});
|
397
|
+
jQuery.data(document.body, 'fusion chart free option', chart_options);
|
398
|
+
});
|
399
|
+
|
400
|
+
|
401
|
+
|