ofc2 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ pkg
data/CHANGES ADDED
@@ -0,0 +1,44 @@
1
+ [1.0] 23.01.2011
2
+ - moved to open-flash-chart-2-lug-wyrm-charmer version (http://teethgrinder.co.uk/open-flash-chart-2/downloads.php)
3
+ - added animation for charts
4
+ [1.0] rc-2 : 03.05.2009
5
+ - moved to open-flash-chart-2-ichor version (http://teethgrinder.co.uk/open-flash-chart-2/downloads.php)
6
+ - initialize methods has changed !!!
7
+ now use a hash eg. OFC2::SomeClass.new(:option => value, :option2 => other_value)
8
+ I find it more readable that old way.
9
+ - add radar charts http://openflashchart2.sentor.pl/chart_examples/radar
10
+ - remove pseudo horizontal stacked bar example
11
+ [0.9] rc-1 : 15.04.2009
12
+ - remove to_json method from OWJSON module
13
+ - remove remove require 'json' from plugin
14
+ - migrate sample application to rails 2.3
15
+ - remove gem 'json' from enviroment.rb
16
+ [0.8] rc-1 : 09.01.2009
17
+ - add shape drawning support, example is here:
18
+ http://openflashchart2.sentor.pl/chart_examples/mix_advanced_draw_shape
19
+ - add stacked bar keys support:
20
+ http://openflashchart2.sentor.pl/chart_examples/stacked_bar
21
+ - pseudo horizontal stacked bar, example:
22
+ http://openflashchart2.sentor.pl/chart_examples/mix_advanced_shapes
23
+ [0.7] rc-1 : 12.12.2008
24
+ - add Tooltip class, example is here:
25
+ http://openflashchart2.sentor.pl/chart_examples/mix_advanced_tooltip
26
+ [0.6] rc-1 : 11.12.2008
27
+ - now generating many inline chart on one page is possible
28
+ - moved to open-flash-chart-2-hyperion version
29
+ - remove spelling errors
30
+ - remove set_tooltip method, use instead set_tip or tip=
31
+ [0.5] beta-4
32
+ - methods are now generated by method_missing
33
+ [0.4] beta-3
34
+ - add ofc2_inline method to generate graph without url
35
+ - add instance variables getters, changes proposed by __Pavlo Masko__
36
+ [0.3] beta-2
37
+ - changed installation instructions
38
+ - add rake tasks to install/uninstall
39
+ [0.2] beta-1
40
+ - change README - add description, install section and info about contact
41
+ - make examples with basic charts
42
+ - compare plugin with php library and add missing class/methods
43
+ [0.1] alpha
44
+ - rewrite php library
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in stupid_captcha.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,14 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ ofc2 (0.0.1)
5
+
6
+ GEM
7
+ remote: http://rubygems.org/
8
+ specs:
9
+
10
+ PLATFORMS
11
+ ruby
12
+
13
+ DEPENDENCIES
14
+ ofc2!
data/MIT-LICENSE ADDED
@@ -0,0 +1,18 @@
1
+ Permission is hereby granted, free of charge, to any person obtaining
2
+ a copy of this software and associated documentation files (the
3
+ "Software"), to deal in the Software without restriction, including
4
+ without limitation the rights to use, copy, modify, merge, publish,
5
+ distribute, sublicense, and/or sell copies of the Software, and to
6
+ permit persons to whom the Software is furnished to do so, subject to
7
+ the following conditions:
8
+
9
+ The above copyright notice and this permission notice shall be
10
+ included in all copies or substantial portions of the Software.
11
+
12
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
13
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
14
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
15
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
16
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
17
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
18
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README ADDED
@@ -0,0 +1,29 @@
1
+ About
2
+ =====================================
3
+ open flash chart 2 plugin for rails applications
4
+
5
+ This library was ported from the open flash chart project's php code to be used with Ruby on Rails.
6
+ Visit the open flash chart project here - http://teethgrinder.co.uk/open-flash-chart-2/
7
+
8
+ NOTE:
9
+ sample application is using haml
10
+ gem install haml
11
+
12
+ If You use rails older that 2.3 probably you have to uncomment method to_json (vendor/plugins/open_flash_chart/lib/open_flash_chart.rb line 14)
13
+ and add gem 'json' in enviroment.rb
14
+ otherwise plugin will not work propertly
15
+
16
+
17
+ Details
18
+ =====================================
19
+ Go to http://openflashchart2.heroku.com/ for details
20
+
21
+
22
+ Help
23
+ =====================================
24
+ Looking for help?
25
+ try:
26
+ home page: http://openflashchart2.heroku.com/infos
27
+ or email to me: lisukorin [at] gmail [dot] com,
28
+ don't forget write 'open flash chart' in subject or my mail client will treat your message as spam.
29
+
data/Rakefile ADDED
@@ -0,0 +1,3 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
data/TODO ADDED
@@ -0,0 +1,6 @@
1
+ ==BUGS==
2
+
3
+ ==Futures==
4
+
5
+ ==Documentation==
6
+ - describe class and methods
@@ -0,0 +1,2 @@
1
+ VERSION: open-flash-chart-2-lug-wyrm-charmer
2
+ DATE: 27.07.2009
Binary file
@@ -0,0 +1,5 @@
1
+ /* SWFObject v2.1 <http://code.google.com/p/swfobject/>
2
+ Copyright (c) 2007-2008 Geoff Stearns, Michael Williams, and Bobby van der Sluis
3
+ This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
4
+ */
5
+ var swfobject=function(){var b="undefined",Q="object",n="Shockwave Flash",p="ShockwaveFlash.ShockwaveFlash",P="application/x-shockwave-flash",m="SWFObjectExprInst",j=window,K=document,T=navigator,o=[],N=[],i=[],d=[],J,Z=null,M=null,l=null,e=false,A=false;var h=function(){var v=typeof K.getElementById!=b&&typeof K.getElementsByTagName!=b&&typeof K.createElement!=b,AC=[0,0,0],x=null;if(typeof T.plugins!=b&&typeof T.plugins[n]==Q){x=T.plugins[n].description;if(x&&!(typeof T.mimeTypes!=b&&T.mimeTypes[P]&&!T.mimeTypes[P].enabledPlugin)){x=x.replace(/^.*\s+(\S+\s+\S+$)/,"$1");AC[0]=parseInt(x.replace(/^(.*)\..*$/,"$1"),10);AC[1]=parseInt(x.replace(/^.*\.(.*)\s.*$/,"$1"),10);AC[2]=/r/.test(x)?parseInt(x.replace(/^.*r(.*)$/,"$1"),10):0}}else{if(typeof j.ActiveXObject!=b){var y=null,AB=false;try{y=new ActiveXObject(p+".7")}catch(t){try{y=new ActiveXObject(p+".6");AC=[6,0,21];y.AllowScriptAccess="always"}catch(t){if(AC[0]==6){AB=true}}if(!AB){try{y=new ActiveXObject(p)}catch(t){}}}if(!AB&&y){try{x=y.GetVariable("$version");if(x){x=x.split(" ")[1].split(",");AC=[parseInt(x[0],10),parseInt(x[1],10),parseInt(x[2],10)]}}catch(t){}}}}var AD=T.userAgent.toLowerCase(),r=T.platform.toLowerCase(),AA=/webkit/.test(AD)?parseFloat(AD.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,q=false,z=r?/win/.test(r):/win/.test(AD),w=r?/mac/.test(r):/mac/.test(AD);/*@cc_on q=true;@if(@_win32)z=true;@elif(@_mac)w=true;@end@*/return{w3cdom:v,pv:AC,webkit:AA,ie:q,win:z,mac:w}}();var L=function(){if(!h.w3cdom){return }f(H);if(h.ie&&h.win){try{K.write("<script id=__ie_ondomload defer=true src=//:><\/script>");J=C("__ie_ondomload");if(J){I(J,"onreadystatechange",S)}}catch(q){}}if(h.webkit&&typeof K.readyState!=b){Z=setInterval(function(){if(/loaded|complete/.test(K.readyState)){E()}},10)}if(typeof K.addEventListener!=b){K.addEventListener("DOMContentLoaded",E,null)}R(E)}();function S(){if(J.readyState=="complete"){J.parentNode.removeChild(J);E()}}function E(){if(e){return }if(h.ie&&h.win){var v=a("span");try{var u=K.getElementsByTagName("body")[0].appendChild(v);u.parentNode.removeChild(u)}catch(w){return }}e=true;if(Z){clearInterval(Z);Z=null}var q=o.length;for(var r=0;r<q;r++){o[r]()}}function f(q){if(e){q()}else{o[o.length]=q}}function R(r){if(typeof j.addEventListener!=b){j.addEventListener("load",r,false)}else{if(typeof K.addEventListener!=b){K.addEventListener("load",r,false)}else{if(typeof j.attachEvent!=b){I(j,"onload",r)}else{if(typeof j.onload=="function"){var q=j.onload;j.onload=function(){q();r()}}else{j.onload=r}}}}}function H(){var t=N.length;for(var q=0;q<t;q++){var u=N[q].id;if(h.pv[0]>0){var r=C(u);if(r){N[q].width=r.getAttribute("width")?r.getAttribute("width"):"0";N[q].height=r.getAttribute("height")?r.getAttribute("height"):"0";if(c(N[q].swfVersion)){if(h.webkit&&h.webkit<312){Y(r)}W(u,true)}else{if(N[q].expressInstall&&!A&&c("6.0.65")&&(h.win||h.mac)){k(N[q])}else{O(r)}}}}else{W(u,true)}}}function Y(t){var q=t.getElementsByTagName(Q)[0];if(q){var w=a("embed"),y=q.attributes;if(y){var v=y.length;for(var u=0;u<v;u++){if(y[u].nodeName=="DATA"){w.setAttribute("src",y[u].nodeValue)}else{w.setAttribute(y[u].nodeName,y[u].nodeValue)}}}var x=q.childNodes;if(x){var z=x.length;for(var r=0;r<z;r++){if(x[r].nodeType==1&&x[r].nodeName=="PARAM"){w.setAttribute(x[r].getAttribute("name"),x[r].getAttribute("value"))}}}t.parentNode.replaceChild(w,t)}}function k(w){A=true;var u=C(w.id);if(u){if(w.altContentId){var y=C(w.altContentId);if(y){M=y;l=w.altContentId}}else{M=G(u)}if(!(/%$/.test(w.width))&&parseInt(w.width,10)<310){w.width="310"}if(!(/%$/.test(w.height))&&parseInt(w.height,10)<137){w.height="137"}K.title=K.title.slice(0,47)+" - Flash Player Installation";var z=h.ie&&h.win?"ActiveX":"PlugIn",q=K.title,r="MMredirectURL="+j.location+"&MMplayerType="+z+"&MMdoctitle="+q,x=w.id;if(h.ie&&h.win&&u.readyState!=4){var t=a("div");x+="SWFObjectNew";t.setAttribute("id",x);u.parentNode.insertBefore(t,u);u.style.display="none";var v=function(){u.parentNode.removeChild(u)};I(j,"onload",v)}U({data:w.expressInstall,id:m,width:w.width,height:w.height},{flashvars:r},x)}}function O(t){if(h.ie&&h.win&&t.readyState!=4){var r=a("div");t.parentNode.insertBefore(r,t);r.parentNode.replaceChild(G(t),r);t.style.display="none";var q=function(){t.parentNode.removeChild(t)};I(j,"onload",q)}else{t.parentNode.replaceChild(G(t),t)}}function G(v){var u=a("div");if(h.win&&h.ie){u.innerHTML=v.innerHTML}else{var r=v.getElementsByTagName(Q)[0];if(r){var w=r.childNodes;if(w){var q=w.length;for(var t=0;t<q;t++){if(!(w[t].nodeType==1&&w[t].nodeName=="PARAM")&&!(w[t].nodeType==8)){u.appendChild(w[t].cloneNode(true))}}}}}return u}function U(AG,AE,t){var q,v=C(t);if(v){if(typeof AG.id==b){AG.id=t}if(h.ie&&h.win){var AF="";for(var AB in AG){if(AG[AB]!=Object.prototype[AB]){if(AB.toLowerCase()=="data"){AE.movie=AG[AB]}else{if(AB.toLowerCase()=="styleclass"){AF+=' class="'+AG[AB]+'"'}else{if(AB.toLowerCase()!="classid"){AF+=" "+AB+'="'+AG[AB]+'"'}}}}}var AD="";for(var AA in AE){if(AE[AA]!=Object.prototype[AA]){AD+='<param name="'+AA+'" value="'+AE[AA]+'" />'}}v.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+AF+">"+AD+"</object>";i[i.length]=AG.id;q=C(AG.id)}else{if(h.webkit&&h.webkit<312){var AC=a("embed");AC.setAttribute("type",P);for(var z in AG){if(AG[z]!=Object.prototype[z]){if(z.toLowerCase()=="data"){AC.setAttribute("src",AG[z])}else{if(z.toLowerCase()=="styleclass"){AC.setAttribute("class",AG[z])}else{if(z.toLowerCase()!="classid"){AC.setAttribute(z,AG[z])}}}}}for(var y in AE){if(AE[y]!=Object.prototype[y]){if(y.toLowerCase()!="movie"){AC.setAttribute(y,AE[y])}}}v.parentNode.replaceChild(AC,v);q=AC}else{var u=a(Q);u.setAttribute("type",P);for(var x in AG){if(AG[x]!=Object.prototype[x]){if(x.toLowerCase()=="styleclass"){u.setAttribute("class",AG[x])}else{if(x.toLowerCase()!="classid"){u.setAttribute(x,AG[x])}}}}for(var w in AE){if(AE[w]!=Object.prototype[w]&&w.toLowerCase()!="movie"){F(u,w,AE[w])}}v.parentNode.replaceChild(u,v);q=u}}}return q}function F(t,q,r){var u=a("param");u.setAttribute("name",q);u.setAttribute("value",r);t.appendChild(u)}function X(r){var q=C(r);if(q&&(q.nodeName=="OBJECT"||q.nodeName=="EMBED")){if(h.ie&&h.win){if(q.readyState==4){B(r)}else{j.attachEvent("onload",function(){B(r)})}}else{q.parentNode.removeChild(q)}}}function B(t){var r=C(t);if(r){for(var q in r){if(typeof r[q]=="function"){r[q]=null}}r.parentNode.removeChild(r)}}function C(t){var q=null;try{q=K.getElementById(t)}catch(r){}return q}function a(q){return K.createElement(q)}function I(t,q,r){t.attachEvent(q,r);d[d.length]=[t,q,r]}function c(t){var r=h.pv,q=t.split(".");q[0]=parseInt(q[0],10);q[1]=parseInt(q[1],10)||0;q[2]=parseInt(q[2],10)||0;return(r[0]>q[0]||(r[0]==q[0]&&r[1]>q[1])||(r[0]==q[0]&&r[1]==q[1]&&r[2]>=q[2]))?true:false}function V(v,r){if(h.ie&&h.mac){return }var u=K.getElementsByTagName("head")[0],t=a("style");t.setAttribute("type","text/css");t.setAttribute("media","screen");if(!(h.ie&&h.win)&&typeof K.createTextNode!=b){t.appendChild(K.createTextNode(v+" {"+r+"}"))}u.appendChild(t);if(h.ie&&h.win&&typeof K.styleSheets!=b&&K.styleSheets.length>0){var q=K.styleSheets[K.styleSheets.length-1];if(typeof q.addRule==Q){q.addRule(v,r)}}}function W(t,q){var r=q?"visible":"hidden";if(e&&C(t)){C(t).style.visibility=r}else{V("#"+t,"visibility:"+r)}}function g(s){var r=/[\\\"<>\.;]/;var q=r.exec(s)!=null;return q?encodeURIComponent(s):s}var D=function(){if(h.ie&&h.win){window.attachEvent("onunload",function(){var w=d.length;for(var v=0;v<w;v++){d[v][0].detachEvent(d[v][1],d[v][2])}var t=i.length;for(var u=0;u<t;u++){X(i[u])}for(var r in h){h[r]=null}h=null;for(var q in swfobject){swfobject[q]=null}swfobject=null})}}();return{registerObject:function(u,q,t){if(!h.w3cdom||!u||!q){return }var r={};r.id=u;r.swfVersion=q;r.expressInstall=t?t:false;N[N.length]=r;W(u,false)},getObjectById:function(v){var q=null;if(h.w3cdom){var t=C(v);if(t){var u=t.getElementsByTagName(Q)[0];if(!u||(u&&typeof t.SetVariable!=b)){q=t}else{if(typeof u.SetVariable!=b){q=u}}}}return q},embedSWF:function(x,AE,AB,AD,q,w,r,z,AC){if(!h.w3cdom||!x||!AE||!AB||!AD||!q){return }AB+="";AD+="";if(c(q)){W(AE,false);var AA={};if(AC&&typeof AC===Q){for(var v in AC){if(AC[v]!=Object.prototype[v]){AA[v]=AC[v]}}}AA.data=x;AA.width=AB;AA.height=AD;var y={};if(z&&typeof z===Q){for(var u in z){if(z[u]!=Object.prototype[u]){y[u]=z[u]}}}if(r&&typeof r===Q){for(var t in r){if(r[t]!=Object.prototype[t]){if(typeof y.flashvars!=b){y.flashvars+="&"+t+"="+r[t]}else{y.flashvars=t+"="+r[t]}}}}f(function(){U(AA,y,AE);if(AA.id==AE){W(AE,true)}})}else{if(w&&!A&&c("6.0.65")&&(h.win||h.mac)){A=true;W(AE,false);f(function(){var AF={};AF.id=AF.altContentId=AE;AF.width=AB;AF.height=AD;AF.expressInstall=w;k(AF)})}}},getFlashPlayerVersion:function(){return{major:h.pv[0],minor:h.pv[1],release:h.pv[2]}},hasFlashPlayerVersion:c,createSWF:function(t,r,q){if(h.w3cdom){return U(t,r,q)}else{return undefined}},removeSWF:function(q){if(h.w3cdom){X(q)}},createCSS:function(r,q){if(h.w3cdom){V(r,q)}},addDomLoadEvent:f,addLoadEvent:R,getQueryParamValue:function(v){var u=K.location.search||K.location.hash;if(v==null){return g(u)}if(u){var t=u.substring(1).split("&");for(var r=0;r<t.length;r++){if(t[r].substring(0,t[r].indexOf("="))==v){return g(t[r].substring((t[r].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(A&&M){var q=C(m);if(q){q.parentNode.replaceChild(M,q);if(l){W(l,true);if(h.ie&&h.win){M.style.display="block"}}M=null;l=null;A=false}}}}}();
data/lib/ofc2.rb ADDED
@@ -0,0 +1,298 @@
1
+ module OFC2
2
+
3
+ # specjal module included in each class
4
+ # with that module we add to_hash method
5
+ # there is also a method_missing which allow user to set/get any instance variable
6
+ # if user try to get not setted instance variable it return nil and generate a warn
7
+ module OWJSON
8
+ # return a hash of instance values
9
+ def to_hash
10
+ self.instance_values
11
+ end
12
+ alias :to_h :to_hash
13
+
14
+ # if You use rails older that 2.3 probably you have to uncomment that method and add "config.gem 'json'" in config/enviroment.rb file
15
+ # otherwise to_json method will not work propertly
16
+ # # You can pass options to to_json method, but remember that they have no effects!!!
17
+ # # argument 'options' is for rails compability
18
+ # def to_json(options = {})
19
+ # to_hash.to_json
20
+ # end
21
+
22
+ # method_missing handle setting and getting instance variables
23
+ # You can set variable in two ways:
24
+ # 1. variable_name = value
25
+ # 1. set_variable_name(value)
26
+ # you can get only alredy setted variables, otherwise return nil
27
+ def method_missing(method_id, *arguments)
28
+ a = arguments[0] if arguments and arguments.size > 0
29
+ method = method_id.to_s
30
+ if method =~ /^(.*)(=)$/
31
+ self.instance_variable_set("@#{$1.gsub('_','__')}", a)
32
+ elsif method =~ /^(set_)(.*)$/
33
+ self.instance_variable_set("@#{$2.gsub('_','__')}", a)
34
+ elsif self.instance_variable_defined?("@#{method_id.to_s.gsub('_','__')}")
35
+ self.instance_variable_get("@#{method_id.to_s.gsub('_','__')}") # that will be return instance variable value or nil, handy
36
+ else
37
+ nil
38
+ end
39
+ end
40
+ end
41
+
42
+ class Engine < Rails::Engine
43
+ initializer "ofc2" do |app|
44
+ ActionController::Base.send :include, OFC2::InstanceMethods
45
+ end
46
+ end
47
+
48
+ module InstanceMethods
49
+ # generate a ofc object using Graph object, it's more handy than ofc2 method
50
+ # +width+ width for div
51
+ # +height+ height for div
52
+ # +graph+ a OFC2::Graph object
53
+ # +base+ uri for graph, default '/', not used in this method, go to ofc2 method for details
54
+ # +id+ id for div with graph, default Time.now.usec
55
+ # +swf_base+ uri for swf file, default '/'
56
+ def ofc2_inline(width, height, graph, id=Time.now.usec, swf_base='/', flash_attributes = {}, flash_params = {})
57
+ div_name = "flashcontent_#{id}"
58
+ <<-EOF
59
+ <div id="#{div_name}"></div>
60
+ <script type="text/javascript">
61
+
62
+ function #{div_name}_data(){
63
+ return '#{graph.render}';
64
+ };
65
+
66
+ swfobject.embedSWF(
67
+ '#{swf_base}open-flash-chart.swf', '#{div_name}',
68
+ '#{width}', '#{height}','9.0.0', 'expressInstall.swf',
69
+ {'get-data':'#{div_name}_data'}, #{flash_params.to_json}, #{flash_attributes.to_json} );
70
+
71
+ </script>
72
+ EOF
73
+ end
74
+
75
+ # generate a ofc object using data from url
76
+ # +width+ width for div
77
+ # +height+ height for div
78
+ # +url+ an url which return data in json format, if you use url_for method to set url param the base param must be set to '' (empty string)
79
+ # +base+ uri for graph, default '/'
80
+ # +id+ id for div with graph, default Time.now.usec
81
+ # +swf_base+ uri for swf file, default '/'
82
+ def ofc2(width, height, url, base='/', id =Time.now.usec, swf_base='/', flash_attributes = {}, flash_params = {})
83
+ url = CGI::escape(url)
84
+ div_name = "flashcontent_#{id}"
85
+ <<-EOF
86
+ <div id='#{div_name}'></div>
87
+ <script type="text/javascript">
88
+ swfobject.embedSWF(
89
+ "#{swf_base}open-flash-chart.swf","#{div_name}",
90
+ "#{width}", "#{height}", "9.0.0", "expressInstall.swf",
91
+ {"data-file":"#{base}#{url}"}, #{flash_params.to_json}, #{flash_attributes.to_json} );
92
+
93
+ </script>
94
+ EOF
95
+ end
96
+ end
97
+
98
+
99
+ CLASSES = {
100
+ :animation =>{},
101
+ :dot =>{ :unavailable_variables => { :type => 'dot' } },
102
+ :solid_dot =>{ :unavailable_variables => { :type => 'solid-dot' } },
103
+ :hollow_dot =>{ :unavailable_variables => { :type => 'hollow-dot' } },
104
+ :star =>{ :unavailable_variables => { :type => 'star' } },
105
+ :bow => { :unavailable_variables => { :type => 'bow' } },
106
+ :anchor => { :unavailable_variables => { :type => 'anchor' } },
107
+ :title => { :default_variables => { :text => '', :style => "{font-size: 20px; color: #FF0F0F; text-align: center;}" } },
108
+ :line_style => { :default_variables => { :style => 'dash', :on => '', :off => '' } },
109
+ :line => {
110
+ :default_variables => { :text => 'label text', :font_size => 10, :colour => '#00FF00' },
111
+ :unavailable_variables => { :type => "line" }
112
+ },
113
+ :area => {
114
+ :default_variables => { :text => 'label text', :font_size => 10, :colour => '#00FF00', :fill => '#0000FF', :fill_alpha => 0.6, :loop => false},
115
+ :unavailable_variables => { :type => "area" }
116
+ },
117
+ :bar_stack_value => { :default_variables => { :value => 0, :colour => '#FF0000'} },
118
+ :bar_stack_key => { :default_variables => { :text => '', :colour => '#FF0000', :font_size => 12 } },
119
+ :bar_stack => {
120
+ :default_variables => { :text => 'label text', :font_size => 10, :colour => '#00FF00', :alpha => 0.6 },
121
+ :unavailable_variables => { :type => "bar_stack" }
122
+ },
123
+ :h_bar_value => { :default_variables => { :left => 0, :right => nil} },
124
+ :h_bar => {
125
+ :default_variables => { :text => 'label text', :font_size => 10, :colour => '#00FF00'},
126
+ :unavailable_variables => { :type => "hbar" }
127
+ },
128
+ :bar_value => { :default_variables => { :top => 0, :bottom => nil, :colour => '#FF0000', :tip => '#val#' } },
129
+ :bar => {
130
+ :default_variables => { :text => 'label text', :font_size => 10, :colour => '#00FF00', :alpha => 0.6 },
131
+ :unavailable_variables => { :type => "bar" },
132
+ },
133
+ :bar_cylinder_outline => {
134
+ :default_variables => { :text => 'label text', :font_size => 10, :colour => '#00FF00', :alpha => 0.6 },
135
+ :unavailable_variables => { :type => "bar_cylinder_outline" },
136
+ },
137
+ :bar_cylinder => {
138
+ :default_variables => { :text => 'label text', :font_size => 10, :colour => '#00FF00', :alpha => 0.6 },
139
+ :unavailable_variables => { :type => "bar_cylinder" },
140
+ },
141
+ :bar_filled => {
142
+ :default_variables => { :text => 'label text', :font_size => 10, :colour => '#00FF00', :outline_colour => '#00FF00', :alpha => 0.6},
143
+ :unavailable_variables => { :type => "bar_filled" },
144
+ },
145
+ :bar_sketch => {
146
+ :default_variables => { :text => 'label text', :font_size => 10, :colour => '#00FF00', :outline_colour => '#00FF00', :alpha => 0.6, :offset => 4 },
147
+ :unavailable_variables => { :type => "bar_sketch" },
148
+ },
149
+ :bar_glass => {
150
+ :default_variables => { :text => 'label text', :font_size => 10, :colour => '#00FF00', :alpha => 0.6 },
151
+ :unavailable_variables => { :type => "bar_glass" },
152
+ },
153
+ :bar_round_glass => {
154
+ :default_variables => { :text => 'label text', :font_size => 10, :colour => '#00FF00', :alpha => 0.6 },
155
+ :unavailable_variables => { :type => "bar_round_glass" },
156
+ },
157
+ :bar_round => {
158
+ :default_variables => { :text => 'label text', :font_size => 10, :colour => '#00FF00', :alpha => 0.6 },
159
+ :unavailable_variables => { :type => "bar_round" },
160
+ },
161
+ :bar_dome => {
162
+ :default_variables => { :text => 'label text', :font_size => 10, :colour => '#00FF00', :alpha => 0.6 },
163
+ :unavailable_variables => { :type => "bar_dome" },
164
+ },
165
+ :bar3d => {
166
+ :default_variables => { :text => 'label text', :font_size => 10, :colour => '#00FF00', :alpha => 0.6 },
167
+ :unavailable_variables => { :type => "bar_3d" },
168
+ },
169
+ :pie_value => { },
170
+ :pie_fade => { :unavailable_variables => { :type => "fade" } },
171
+ :pie_bounce => {
172
+ :default_variables => { :distance => 5},
173
+ :unavailable_variables => { :type => "bounce" },
174
+ },
175
+ :pie => {
176
+ :default_variables => { :colours => [], :alpha => 0.6, :start_angle => 35, :tip => '#val#', :gradient_fill => false, :label_colour => '#0000FF', :no_labels => false, :on_click => ''},
177
+ :unavailable_variables => { :type => "pie" },
178
+ },
179
+ :y_axis => { },
180
+ :y_axis_right => { },
181
+ :y_legend => { :default_variables => { :text => "y legend", :style =>"{font-size: 20px; color:#0000ff; font-family: Verdana; text-align: center;}" } },
182
+ :y2_legend => { :default_variables => { :text => "y2 legend", :style =>"{font-size: 20px; color:#0000ff; font-family: Verdana; text-align: center;}" } },
183
+ :x_axis_label => { },
184
+ :x_axis_labels => { },
185
+ :x_axis => { },
186
+ :x_legend => { :default_variables => { :text => "y legend", :style =>"{font-size: 20px; color:#0000ff; font-family: Verdana; text-align: center;}" } },
187
+ :tooltip => { },
188
+ :ofc_menu_item => {
189
+ :default_variables => { :text => '', :javascript_function => '' },
190
+ :unavailable_variables => { :type => 'text' },
191
+ },
192
+ :ofc_menu_item_camera => {
193
+ :default_variables => { :text => '', :javascript_function => '' },
194
+ :unavailable_variables => { :type => 'camera-icon' },
195
+ },
196
+ :ofc_menu => {
197
+ :default_variables => { :colour => '', :outline__colour => '' },
198
+ :unavailable_variables => { :type => 'camera-icon' },
199
+ },
200
+ :scatter_value => { :default_variables => { :x => 0, :y => 0} },
201
+ :scatter => {
202
+ :default_variables => { :text => 'label', :colour => '#FF0000' },
203
+ :unavailable_variables => { :type => 'scatter' },
204
+ },
205
+ :scatter_line => {
206
+ :default_variables => { :text => 'label', :colour => '#FF0000', :stepgraph => 'horizontal'},
207
+ :unavailable_variables => { :type => 'scatter_line' },
208
+ },
209
+ :shape_point => { :default_variables => { :x => 0, :y => 0} },
210
+ :shape => {
211
+ :default_variables => { :colour => '#FF0000'},
212
+ :unavailable_variables => { :type => 'shape' },
213
+ },
214
+ :radar_axis_labels => { :default_variables => { :labels => [], :colour => '#FAFFAF'} },
215
+ :radar_spoke_labels => { :default_variables => { :labels => [], :colour => '#FAFFAF'} },
216
+ :radar_axis => { }
217
+ }
218
+
219
+ CLASSES.each_key do |class_name|
220
+ _class_name =class_name.to_s.camelize
221
+ new_class = Class.new do
222
+ include OWJSON
223
+
224
+ def initialize( opts = {})
225
+ class_data = CLASSES[self.class.name.demodulize.underscore.to_sym]
226
+
227
+ class_data[:default_variables].each do |name, value|
228
+ # self.instance_variable_set("@#{name.to_s.gsub('_','__')}", value)
229
+ self.send("#{name}=", value)
230
+ end if class_data[:default_variables]
231
+
232
+ opts.each do |name, value|
233
+ # self.instance_variable_set("@#{name.to_s.gsub('_','__')}", value)
234
+ self.send("#{name}=", value)
235
+ end
236
+
237
+ class_data[:unavailable_variables].each do |name, value|
238
+ # self.instance_variable_set("@#{name.to_s.gsub('_','__')}", value)
239
+ self.send("#{name}=", value)
240
+ end if class_data[:unavailable_variables]
241
+ end
242
+ end
243
+
244
+ const_set(_class_name, new_class)
245
+ end
246
+
247
+
248
+
249
+ # +title+
250
+ # +x_axis+
251
+ # +y_axis+
252
+ # +y_axis_right+
253
+ # +x_legend+
254
+ # +y_legend+
255
+ # +bg_colour+
256
+ # +elements+
257
+ class Graph
258
+ include OWJSON
259
+
260
+ # it must be done in that way because method_missing method replace _ to __,
261
+ # maybe I add seccond parameter to handle with that
262
+ %w(radar_axis x_axis y_axis y_axis_right x_legend y_legend y2_legend bg_colour).each do |method|
263
+ define_method("set_#{method}") do |a|
264
+ self.instance_variable_set("@#{method}", a)
265
+ end
266
+ define_method("#{method}=") do |a|
267
+ self.instance_variable_set("@#{method}", a)
268
+ end
269
+ define_method("#{method}") do
270
+ self.instance_variable_get("@#{method}")
271
+ end
272
+ end
273
+
274
+ def initialize(opts = {})
275
+ @title = Title.new(:text => "Graph" )
276
+ @elements = []
277
+ opts.each do |name, value|
278
+ self.send("#{name}=", value)
279
+ end
280
+ end
281
+
282
+ def add_element( e )
283
+ @elements << e
284
+ end
285
+ alias_method :<<, :add_element
286
+
287
+ def render
288
+ s = to_json
289
+ # about underscores
290
+ s.gsub!('___','') # that is for @___3d variable
291
+ s.gsub!('__','-') # that is for @smt__smt variables
292
+ # variables @smt_smt should go without changes
293
+ s
294
+ end
295
+ end
296
+
297
+
298
+ end
@@ -0,0 +1,3 @@
1
+ module OFC2
2
+ VERSION = "0.0.1"
3
+ end
data/ofc2.gemspec ADDED
@@ -0,0 +1,20 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "ofc2/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "ofc2"
7
+ s.version = OFC2::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Rafał Lisowski"]
10
+ s.email = ["lisukorin@gmail.com"]
11
+ s.homepage = "http://github.com/korin/open_flash_chart_2_plugin"
12
+ s.summary = %q{open flash chart 2 plugin for rails applications}
13
+ s.description = %q{This library was ported from the open flash chart project's php code to be used with Ruby on Rails.}
14
+ s.license = 'MIT'
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+ end
metadata ADDED
@@ -0,0 +1,61 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ofc2
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Rafał Lisowski
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-23 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: This library was ported from the open flash chart project's php code
15
+ to be used with Ruby on Rails.
16
+ email:
17
+ - lisukorin@gmail.com
18
+ executables: []
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - .gitignore
23
+ - CHANGES
24
+ - Gemfile
25
+ - Gemfile.lock
26
+ - MIT-LICENSE
27
+ - README
28
+ - Rakefile
29
+ - TODO
30
+ - assets/VERSION.txt
31
+ - assets/open-flash-chart.swf
32
+ - assets/swfobject.js
33
+ - lib/ofc2.rb
34
+ - lib/ofc2/version.rb
35
+ - ofc2.gemspec
36
+ homepage: http://github.com/korin/open_flash_chart_2_plugin
37
+ licenses:
38
+ - MIT
39
+ post_install_message:
40
+ rdoc_options: []
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ! '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ requirements: []
56
+ rubyforge_project:
57
+ rubygems_version: 1.8.10
58
+ signing_key:
59
+ specification_version: 3
60
+ summary: open flash chart 2 plugin for rails applications
61
+ test_files: []