123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779 |
-
- if(!window.jGCharts)
- jGCharts = {};
- jGCharts.Api = function(){
-
-
- var _serie = 0;
- var _per_serie = 0;
- var _max = 0;
- var _min = 0;
- var _api = "http://chart.apis.google.com/chart?";
- var _params = {
- type : "cht",
- size : "chs",
- data : "chd",
- colors : "chco",
- scaling : "chds",
- axis_type : "chxt",
- axis_range : "chxr",
- axis_labels : "chxl",
- legend : "chdl",
- bar_width : "chbh",
- background : "chf",
- fillarea : "chm",
- title : "chtt",
- title_style : "chts",
- grid : "chg",
- line_style : "chls",
- agent : "agent"
-
- };
-
- var _is_stacked = false;
- var _is_horizontal = false;
- var _is_vertical = false;
- var _is_fillarea = false;
- var _is_bar = false;
- var _is_line = false;
- var _is_pie = false;
-
-
-
- var _type = "bvg";
-
- var _size = "300x200";
-
- var _title = false;
-
- var _title_style = false;
-
-
- var _data = false;
-
- var _legend = false;
-
-
- var _axis_labels = [];
- var _axis_step = 1;
-
- var _axis_type = "x,y";
-
-
- var _bg = false;
- var _chbg = false;
-
- var _bg_offset = false;
- var _chbg_offset = false;
-
- var _bg_type = "solid";
- var _chbg_type = "solid";
-
- var _bg_angle = 90;
- var _chbg_angle = 90;
-
- var _bg_width = 10;
- var _chbg_width = 10;
-
- var _bg_trasparency = false;
- var _chbg_trasparency = false;
-
- var _fillarea = false;
-
- var _fillbottom = false;
-
- var _filltop = false;
-
- var _bar_width = 20;
- var _bar_spacing = 1;
-
-
- var _grid = false;
- var _grid_y = 10;
- var _grid_x = 10;
- var _grid_line = 10;
- var _grid_blank = 0;
-
-
- var _lines = false;
-
-
-
-
- var _palette = [ "5131C9","FFCC00","DA1B1B","FF9900","FF6600","CCFFFF","CCFF00",
- "CCCCCC","FF99CC","999900","999999","66FF00","66CC00","669900","660099",
- "33CC00","333399","000000"];
-
-
- var simpleEncoding = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
-
-
-
-
- function simpleEncode(valueArray,maxValue) {
-
- var chartData = [];
- for (var i = 0; i < valueArray.length; i++) {
- var currentValue = valueArray[i];
- if (!isNaN(currentValue) && currentValue >= 0) {
- chartData.push(simpleEncoding.charAt(Math.round((simpleEncoding.length-1) * currentValue / maxValue)));
- }else {
- chartData.push('_');
- }
- }
- return chartData.join('');
- }
-
-
-
-
-
-
- function _bar_options(){
- var _ret = _bar_width;
- if(_bar_spacing)
- _ret += "," + _bar_spacing;
- return _ret;
- }
-
- function _eval_legend(){
- if(!_legend.constructor == Array)
- throw new Error("Legend must be Array");
- var _ret = "";
- for(var x=0;x < _legend.length;x++)
- _ret += _legend[x] + "|";
- _ret = _rlasttrim(_ret,"|");
-
- return _ret;
- }
-
-
-
-
-
- function _eval_data(){
-
- if(!_data.constructor == Array)
- throw new Error("Data must be Array");
- var _ret = '';
-
-
- var _cols = [];
- for(var x=0;x < _data.length;x++){
- if(_data[x].constructor != Array)
- _data[x] = [_data[x]];
-
-
- for(var y = 0;y < _data[x].length;y++){
- if(!_cols[y])
- _cols[y] = [];
- _cols[y].push((_data[x][y]));
-
-
- if(_cols[y].length > _per_serie){
-
- _per_serie = _cols[y].length;
-
- _serie = _data[x].length;
- }
-
- }
-
-
-
-
-
-
-
-
-
- if(_is_stacked){
- _set_max(sum(_data[x]));
- _set_min(sum(_data[x]));
- }else{
- _set_max(_data[x]);
- _set_min(_data[x]);
- }
- }
-
-
-
-
-
-
-
- if(_is_fillarea && _filltop)
- _cols = _fill_top(_cols);
-
- if(_is_fillarea && _fillbottom)
- _cols = _fill_bottom(_cols);
-
-
-
-
-
- for(var y=0;y < _cols.length;y++){
-
- _ret += simpleEncode(_cols[y],_max) + ",";
-
- }
-
-
- _ret = _rlasttrim(_ret,",");
-
-
- return "s:" + _ret;
- }
- function _fill_bottom(_data){
- var _min_serie = [];
- for(var x = 1;x <= _per_serie;x++)
- _min_serie.push(0);
- _data.push(_min_serie);
-
- return _data;
- }
- function _fill_top(_data){
- var _max_serie = [];
- for(var x = 1;x <= _per_serie;x++)
- _max_serie.push(_max);
- _data.unshift(_max_serie);
- return _data;
- }
-
- function _color(){
-
- var _ret = "";var _t = "";var i = _serie;
-
-
- if(_is_fillarea && _filltop)
- i++;
-
- for(var x = 0; x < i; x++){
- _t = _colors[x] || _palette[x];
- _ret += _t + ",";
- }
- _ret = _rlasttrim(_ret,",");
-
-
- return _ret;
- }
-
-
-
-
- function _scaling(){
- return _min + "," + _max;
- }
-
- function _set_max(val){
- if(val.constructor == Array)
- val.forEach(function(nr){
-
- _set_max(nr);
- });
- else
- if(_max < val)
- _max = val;
- }
- function _set_min(val){
- if(val.constructor == Array)
- val.forEach(function(nr){
-
- _set_min(nr);
- });
- else
- if(_min > val)
- _min = val;
- }
- function _axis_range(){
- return "0,"+_min+","+ _max +"|1,"+_min+"," + _max;
- }
-
-
-
- function _eval_labels(){
- var _ret = "";
-
- if(_axis_labels.length == 0 && _per_serie > 10)
- _axis_step = parseInt(_per_serie / 10);
-
- if(_is_horizontal){
- var _temp = [];
- for(var x= _axis_labels.length; x > 0; x--)
- _temp.push(_axis_labels[(x - 1)]);
-
- _axis_labels = _temp;
- }
-
- for(var x=0;x < _per_serie;x++){
-
- var _val = (x % _axis_step) == 0 ? (_axis_labels[x] || x) : '' ;
- _ret += _val + "|";
- }
-
- _ret = _rlasttrim(_ret,"|");
-
-
-
- var _a = (_is_horizontal) ? 1 : 0;
-
- return _a + ":|" + _ret;
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- function _background(){
-
- var _type = _background_type(_bg_type);
- var _chtype = _background_type(_chbg_type);
-
- var _ret = "";
-
- if(_bg && _bg_trasparency)
- _bg += parseInt(_bg_trasparency);
-
- if(_bg && _type == "s")
- _ret = "bg,s," + _bg;
-
- if(_bg && _type == "lg")
- _ret = "bg,lg," + _bg_angle + "," + _bg + ",0," + _bg_offset +",1";
-
- if(_bg && _type == "ls")
- _ret = "bg,ls," + _bg_angle + "," + _bg + ",0." + parseInt(_bg_width/10) + "," + _bg_offset + ",0." + parseInt(_bg_width/10) ;
-
-
-
- if(_chbg && _chbg_trasparency)
- _chbg += parseInt(_chbg_trasparency);
-
- if(_chbg && _bg)
- _ret += '|';
-
- if(_chbg && _chtype == "s")
- _ret += "c,s," + _chbg;
-
-
- if(_chbg && _chtype == "lg")
- _ret += "c,lg," + _chbg_angle + "," + _chbg + ",0," + _chbg_offset +",1";
-
- if(_chbg && _chtype == "ls")
- _ret += "c,ls," + _chbg_angle + "," + _chbg + ",0." + parseInt(_chbg_width/10) + "," + _chbg_offset + ",0." + parseInt(_chbg_width/10) ;
-
-
-
-
- return _ret;
- }
- function _background_type(type){
- if(type == "solid")
- return "s";
- if(type == "gradient")
- return "lg";
- if(type == "stripes")
- return "ls";
-
- return type;
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- function _fill_area(){
- var _arr = [];var _ret = '';
- if(_is_fillarea){
- _arr = _color(_colors, _filltop).split(",");
-
-
- _arr.forEach(function(val,index){
- _ret += 'b,' + val + ',' + index + ',' +(index + 1) + ',' + '0' + '|';
- });
- _ret = _rlasttrim(_ret,"|");
- }
- return _ret;
- }
-
-
- function _eval_grid(){
- var _ret = '';
- if(_grid_x >= 0)
- _ret += _grid_x;
- if(_grid_y >= 0)
- _ret += "," + _grid_y;
- if(_grid_line >= 0)
- _ret += "," + _grid_line;
- if(_grid_blank >= 0)
- _ret += "," + _grid_blank;
-
-
- return _ret;
- }
-
-
- function _line_style(){
- var _ret = "";
- _lines.forEach(function(val){
-
- _ret += val.join(",") + "|";
- });
- _ret = _rlasttrim(_ret,"|");
-
- return _ret;
- }
-
- function _options(options){
- if(jGCharts.Api.type.indexOf(options.type) !== -1)
- _type = options.type;
-
-
-
-
- if(options.size)
- _size = options.size;
- if(options.data)
- _data = options.data;
- if(options.legend)
- _legend = options.legend;
- if(options.axis_labels)
- _axis_labels = options.axis_labels;
- if(options.axis_step)
- _axis_step = options.axis_step;
- if(options.colors)
- _colors = options.colors;
- else
- _colors = [];
-
-
- if(options.lines)
- _lines = options.lines;
-
-
-
-
- if(options.title)
- _title = options.title;
-
- if(options.title_color && options.title_size)
- _title_style = options.title_color + "," + options.title_size;
-
- if(options.bar_width)
- _bar_width = options.bar_width;
- if(options.bar_spacing >= 0)
- _bar_spacing = options.bar_spacing;
-
-
- if(options.fillarea)
- _fillarea = options.fillarea;
- if(options.fillbottom)
- _fillbottom = options.fillbottom;
- if(options.filltop)
- _filltop = options.filltop;
-
-
- if(options.axis_type)
- _axis_type = options.axis_type;
-
-
- if(options.bg)
- _bg = options.bg;
- if(options.bg_type)
- _bg_type = options.bg_type;
- if(options.bg_offset)
- _bg_offset = options.bg_offset;
- if(options.bg_width)
- _bg_width = options.bg_width;
- if(options.bg_angle >= 0)
- _bg_angle = options.bg_angle;
- if(options.bg_trasparency)
- _bg_trasparency = options.bg_trasparency;
- if(options.chbg)
- _chbg = options.chbg;
- if(options.chbg_type)
- _chbg_type = options.chbg_type;
- if(options.chbg_offset)
- _chbg_offset = options.chbg_offset;
- if(options.chbg_width)
- _chbg_width = options.chbg_width;
- if(options.chbg_angle >= 0)
- _chbg_angle = options.chbg_angle;
- if(options.chbg_trasparency)
- _chbg_trasparency = options.chbg_trasparency;
-
-
- if(options.grid){
- _grid = options.grid;
-
- if(options.grid_x >= 0)
- _grid_x = options.grid_x;
- if(options.grid_y >= 0)
- _grid_y = options.grid_y;
- if(options.grid_line >= 0)
- _grid_line = options.grid_line;
- if(options.grid_blank >= 0)
- _grid_blank = options.grid_blank;
- }
- }
- function _param(index,data, last){
- var l = last ? "" : "&";
- return _params[index] + "=" + data + l;
- }
- function _flags(){
-
- _is_vertical = _type.indexOf("v") !== -1;
- _is_horizontal = _type.indexOf("h") !== -1;
- _is_stacked = _type.indexOf("s") !== -1 &&
- _type != "ls" &&
- _type != "lc";
-
- _is_line = (_type == "ls" || _type == "lc");
- _is_pie = (_type == "p" || _type == "p3");
- _is_fillarea = _is_line && _fillarea;
-
- _is_bar = _type.indexOf("b") !== -1;
- }
-
- function _rlasttrim(str, search){
- return (str.lastIndexOf(search) !== -1) ? str.substr(0, str.lastIndexOf(search)) : str;
- }
-
- return {
-
-
- make : function(options){
-
-
- var url = _api;
-
- _options(options);
- _flags();
-
- url += _param("type", _type);
- url += _param("size", _size);
-
- if(_title)
- url += _param("title", _title);
- if(_title_style)
- url += _param("title_style", _title_style);
- if(_is_bar){
- url += _param("bar_width", _bar_options());
- }
-
- url += _param("axis_type", _axis_type);
- if(!_is_pie && _legend.length > 0)
- url += _param("legend", _eval_legend());
-
- url += _param("data", _eval_data());
- url += _param("scaling", _scaling());
- url += _param("axis_range", _axis_range());
- url += _param("axis_labels", _eval_labels());
- url += _param("background", _background());
- url += _param("colors", _color());
-
- if(_is_line && _lines)
- url += _param("line_style", _line_style());
-
- if(_grid)
- url += _param("grid", _eval_grid());
-
- if(_is_line && _is_fillarea)
- url += _param("fillarea", _fill_area());
-
- url += _param("agent", "jgcharts", true);
-
- return url;
- }
-
- }
- };
- jGCharts.Api.type = ["bhs", "bvs", "bhg", "bvg", "lc", "ls","p","p3"];
-
- function sum( arr ) { return foldl( arr, 0, function(acc,x){ return acc + x } ) }
- function foldl( arr, acc, folder_fn ){
- for(var i=0; i < arr.length; i++){
- acc = folder_fn( acc, arr[i] );
- }
- return acc;
- }
- Function.prototype.method = function (name, fn) {
- this.prototype[name] = fn;
- return this;
- };
- if ( !Array.prototype.forEach ) {
- Array.
- method(
- 'forEach',
- function(fn, thisObj) {
- var scope = thisObj || window;
- for ( var i=0, j=this.length; i < j; ++i ) {
- fn.call(scope, this[i], i, this);
- }
- }
- ).
- method(
- 'every',
- function(fn, thisObj) {
- var scope = thisObj || window;
- for ( var i=0, j=this.length; i < j; ++i ) {
- if ( !fn.call(scope, this[i], i, this) ) {
- return false;
- }
- }
- return true;
- }
- ).
- method(
- 'some',
- function(fn, thisObj) {
- var scope = thisObj || window;
- for ( var i=0, j=this.length; i < j; ++i ) {
- if ( fn.call(scope, this[i], i, this) ) {
- return true;
- }
- }
- return false;
- }
- ).
- method(
- 'map',
- function(fn, thisObj) {
- var scope = thisObj || window;
- var a = [];
- for ( var i=0, j=this.length; i < j; ++i ) {
- a.push(fn.call(scope, this[i], i, this));
- }
- return a;
- }
- ).
- method(
- 'filter',
- function(fn, thisObj) {
- var scope = thisObj || window;
- var a = [];
- for ( var i=0, j=this.length; i < j; ++i ) {
- if ( !fn.call(scope, this[i], i, this) ) {
- continue;
- }
- a.push(this[i]);
- }
- return a;
- }
- ).
- method(
- 'indexOf',
- function(el, start) {
- var start = start || 0;
- for ( var i=start, j=this.length; i < j; ++i ) {
- if ( this[i] === el ) {
- return i;
- }
- }
- return -1;
- }
- ).
- method(
- 'lastIndexOf',
- function(el, start) {
- var start = start || this.length;
- if ( start >= this.length ) {
- start = this.length;
- }
- if ( start < 0 ) {
- start = this.length + start;
- }
- for ( var i=start; i >= 0; --i ) {
- if ( this[i] === el ) {
- return i;
- }
- }
- return -1;
- }
- );
- }
-
- jGCharts.Base = {
- init : function(options){
- options = jQuery.extend({}, options);
- return this.each(function(){
-
- if(!options.data)
- throw new Error("No Data");
-
- var api = new jGCharts.Api();
- var url = api.make(options);
- jQuery('<img>').attr("src",url).appendTo(this);
- jQuery('<p>' + url + '</p>').appendTo(this);
- });
- }
- };
- jQuery.fn.jgcharts = jGCharts.Base.init;
|