blob: 20accf62863d91723589cde5955fd92d0700b289 [file] [log] [blame]
/*
Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
if(!dojo._hasResource["dojox.widget.DataPresentation"]){
dojo._hasResource["dojox.widget.DataPresentation"]=true;
dojo.provide("dojox.widget.DataPresentation");
dojo.experimental("dojox.widget.DataPresentation");
dojo.require("dojox.grid.DataGrid");
dojo.require("dojox.charting.Chart2D");
dojo.require("dojox.charting.widget.Legend");
dojo.require("dojox.charting.action2d.Tooltip");
dojo.require("dojox.charting.action2d.Highlight");
dojo.require("dojo.colors");
dojo.require("dojo.data.ItemFileWriteStore");
(function(){
var _1=function(_2,_3,_4,_5,_6){
var _7=[],_8=_3;
_7[0]={value:0,text:""};
var _9=_2.slice(0);
if(_4){
_9.reverse();
}
var _a=_9.length;
if((_5!=="ClusteredBars")&&(_5!=="StackedBars")){
var _b=_6.offsetWidth;
var _c=(""+_9[0]).length*_9.length*7;
if(_8==1){
for(var z=1;z<500;++z){
if((_c/z)<_b){
break;
}
++_8;
}
}
}
for(var i=0;i<_a;i++){
if(i%_8==0){
_7.push({value:(i+1),text:_9[i]});
}else{
_7.push({value:(i+1),text:""});
}
}
_7.push({value:(_a+1),text:""});
return _7;
};
var _d=function(_e,_f){
var _10={vertical:false,labels:_f,min:0,max:_f.length-1,majorTickStep:1,minorTickStep:1};
if((_e==="ClusteredBars")||(_e==="StackedBars")){
_10.vertical=true;
}
if((_e==="Lines")||(_e==="Areas")||(_e==="StackedAreas")){
_10.min++;
_10.max--;
}
return _10;
};
var _11=function(_12,_13,_14,_15){
var _16={vertical:true,fixLower:"major",fixUpper:"major",natural:true};
if(_13==="secondary"){
_16.leftBottom=false;
}
if((_12==="ClusteredBars")||(_12==="StackedBars")){
_16.vertical=false;
}
if(_14==_15){
_16.min=_14-1;
_16.max=_15+1;
}
return _16;
};
var _17=function(_18,_19,_1a){
var _1b={type:_18,hAxis:"independent",vAxis:"dependent-"+_19,gap:4,lines:false,areas:false,markers:false};
if((_18==="ClusteredBars")||(_18==="StackedBars")){
_1b.hAxis=_1b.vAxis;
_1b.vAxis="independent";
}
if((_18==="Lines")||(_18==="Hybrid-Lines")||(_18==="Areas")||(_18==="StackedAreas")){
_1b.lines=true;
}
if((_18==="Areas")||(_18==="StackedAreas")){
_1b.areas=true;
}
if(_18==="Lines"){
_1b.markers=true;
}
if(_18==="Hybrid-Lines"){
_1b.shadows={dx:2,dy:2,dw:2};
_1b.type="Lines";
}
if(_18==="Hybrid-ClusteredColumns"){
_1b.type="ClusteredColumns";
}
if(_1a){
_1b.animate=_1a;
}
return _1b;
};
var _1c=function(_1d,_1e,_1f,_20,_21,_22,_23,_24,_25,_26){
var _27=_1e;
if(!_27){
_1d.innerHTML="";
_27=new dojox.charting.Chart2D(_1d);
}
if(_23){
_23._clone=function(){
var _28=new dojox.charting.Theme({chart:this.chart,plotarea:this.plotarea,axis:this.axis,series:this.series,marker:this.marker,antiAlias:this.antiAlias,assignColors:this.assignColors,assignMarkers:this.assigneMarkers,colors:dojo.delegate(this.colors)});
_28.markers=this.markers;
_28._buildMarkerArray();
return _28;
};
_27.setTheme(_23);
}
var _29=_1(_24.series_data[0],_22,_20,_1f,_1d);
var _2a={};
var _2b=null;
var _2c=null;
var _2d=_24.series_name.length;
for(var i=0;i<_2d;i++){
if(_24.series_chart[i]&&(_24.series_data[i].length>0)){
var _2e=_1f;
var _2f=_24.series_axis[i];
if(_2e=="Hybrid"){
if(_24.series_charttype[i]=="line"){
_2e="Hybrid-Lines";
}else{
_2e="Hybrid-ClusteredColumns";
}
}
if(!_2a[_2f]){
_2a[_2f]={};
}
if(!_2a[_2f][_2e]){
var _30=_2f+"-"+_2e;
_27.addPlot(_30,_17(_2e,_2f,_21));
new dojox.charting.action2d.Tooltip(_27,_30);
if((_2e!=="Lines")&&(_2e!=="Hybrid-Lines")){
new dojox.charting.action2d.Highlight(_27,_30);
}
_2a[_2f][_2e]=true;
}
var _31=[];
var _32=_24.series_data[i].length;
for(var j=0;j<_32;j++){
var val=_24.series_data[i][j];
_31.push(val);
if(_2b===null||val>_2b){
_2b=val;
}
if(_2c===null||val<_2c){
_2c=val;
}
}
if(_20){
_31.reverse();
}
var _33={plot:_2f+"-"+_2e};
if(_24.series_linestyle[i]){
_33.stroke={style:_24.series_linestyle[i]};
}
_27.addSeries(_24.series_name[i],_31,_33);
}
}
_27.addAxis("independent",_d(_1f,_29));
_27.addAxis("dependent-primary",_11(_1f,"primary",_2c,_2b));
_27.addAxis("dependent-secondary",_11(_1f,"secondary",_2c,_2b));
_27.render();
return _27;
};
var _34=function(_35,_36,_37,_38){
var _39=_36;
if(!_39){
if(_38){
_39=new dojox.charting.widget.Legend({chart:_37,horizontal:false},_35);
}else{
_39=new dojox.charting.widget.Legend({chart:_37,vertical:false},_35);
}
}
return _39;
};
var _3a=function(_3b,_3c,_3d,_3e,_3f){
var _40=_3c||new dojox.grid.DataGrid({},_3b);
_40.startup();
_40.setStore(_3d,_3e,_3f);
var _41=[];
for(var ser=0;ser<_3d.series_name.length;ser++){
if(_3d.series_grid[ser]&&(_3d.series_data[ser].length>0)){
_41.push({field:"data."+ser,name:_3d.series_name[ser],width:"auto",formatter:_3d.series_gridformatter[ser]});
}
}
_40.setStructure(_41);
_40.render();
return _40;
};
var _42=function(_43,_44){
if(_44.title){
_43.innerHTML=_44.title;
}
};
var _45=function(_46,_47){
if(_47.footer){
_46.innerHTML=_47.footer;
}
};
var _48=function(_49,_4a){
var _4b=_49;
if(_4a){
var _4c=_4a.split(/[.\[\]]+/);
for(var _4d in _4c){
if(_4b){
_4b=_4b[_4c[_4d]];
}
}
}
return _4b;
};
dojo.declare("dojox.widget.DataPresentation",null,{type:"chart",chartType:"clusteredBars",reverse:false,animate:null,labelMod:1,legendVertical:false,constructor:function(_4e,_4f){
dojo.mixin(this,_4f);
this.domNode=dojo.byId(_4e);
this[this.type+"Node"]=this.domNode;
if(typeof this.theme=="string"){
this.theme=dojo.getObject(this.theme);
}
this.chartNode=dojo.byId(this.chartNode);
this.legendNode=dojo.byId(this.legendNode);
this.gridNode=dojo.byId(this.gridNode);
this.titleNode=dojo.byId(this.titleNode);
this.footerNode=dojo.byId(this.footerNode);
if(this.url){
this.setURL(null,this.refreshInterval);
}else{
if(this.data){
this.setData(null,this.refreshInterval);
}else{
this.setStore();
}
}
},setURL:function(url,_50){
if(_50){
this.cancelRefresh();
}
this.url=url||this.url;
this.refreshInterval=_50||this.refreshInterval;
var me=this;
dojo.xhrGet({url:this.url,handleAs:"json-comment-optional",load:function(_51,_52){
me.setData(_51);
},error:function(xhr,_53){
if(me.urlError&&(typeof me.urlError=="function")){
me.urlError(xhr,_53);
}
}});
if(_50&&(this.refreshInterval>0)){
this.refreshIntervalPending=setInterval(function(){
me.setURL();
},this.refreshInterval);
}
},setData:function(_54,_55){
if(_55){
this.cancelRefresh();
}
this.data=_54||this.data;
this.refreshInterval=_55||this.refreshInterval;
var _56=(typeof this.series=="function")?this.series(this.data):this.series;
var _57=[],_58=[],_59=[],_5a=[],_5b=[],_5c=[],_5d=[],_5e=[],_5f=[],_60=0;
for(var ser=0;ser<_56.length;ser++){
_57[ser]=_48(this.data,_56[ser].datapoints);
if(_57[ser]&&(_57[ser].length>_60)){
_60=_57[ser].length;
}
_58[ser]=[];
_59[ser]=_56[ser].name||(_56[ser].namefield?_48(this.data,_56[ser].namefield):null)||("series "+ser);
_5a[ser]=(_56[ser].chart!==false);
_5b[ser]=_56[ser].charttype||"bar";
_5c[ser]=_56[ser].linestyle;
_5d[ser]=_56[ser].axis||"primary";
_5e[ser]=(_56[ser].grid!==false);
_5f[ser]=_56[ser].gridformatter;
}
var _61,_62,_63,_64;
var _65=[];
for(_61=0;_61<_60;_61++){
_62={index:_61};
for(ser=0;ser<_56.length;ser++){
if(_57[ser]&&(_57[ser].length>_61)){
_63=_48(_57[ser][_61],_56[ser].field);
if(_5a[ser]){
_64=parseFloat(_63);
if(!isNaN(_64)){
_63=_64;
}
}
_62["data."+ser]=_63;
_58[ser].push(_63);
}
}
_65.push(_62);
}
if(_60<=0){
_65.push({index:0});
}
var _66=new dojo.data.ItemFileWriteStore({data:{identifier:"index",items:_65}});
if(this.data.title){
_66.title=this.data.title;
}
if(this.data.footer){
_66.footer=this.data.footer;
}
_66.series_data=_58;
_66.series_name=_59;
_66.series_chart=_5a;
_66.series_charttype=_5b;
_66.series_linestyle=_5c;
_66.series_axis=_5d;
_66.series_grid=_5e;
_66.series_gridformatter=_5f;
this.setPreparedStore(_66);
if(_55&&(this.refreshInterval>0)){
var me=this;
this.refreshIntervalPending=setInterval(function(){
me.setData();
},this.refreshInterval);
}
},refresh:function(){
if(this.url){
this.setURL(this.url,this.refreshInterval);
}else{
if(this.data){
this.setData(this.data,this.refreshInterval);
}
}
},cancelRefresh:function(){
if(this.refreshIntervalPending){
clearInterval(this.refreshIntervalPending);
this.refreshIntervalPending=undefined;
}
},setStore:function(_67,_68,_69){
this.setPreparedStore(_67,_68,_69);
},setPreparedStore:function(_6a,_6b,_6c){
this.preparedstore=_6a||this.store;
this.query=_6b||this.query;
this.queryOptions=_6c||this.queryOptions;
if(this.preparedstore){
if(this.chartNode){
this.chartWidget=_1c(this.chartNode,this.chartWidget,this.chartType,this.reverse,this.animate,this.labelMod,this.theme,this.preparedstore,this.query,this,_6c);
}
if(this.legendNode){
this.legendWidget=_34(this.legendNode,this.legendWidget,this.chartWidget,this.legendVertical);
}
if(this.gridNode){
this.gridWidget=_3a(this.gridNode,this.gridWidget,this.preparedstore,this.query,this.queryOptions);
}
if(this.titleNode){
_42(this.titleNode,this.preparedstore);
}
if(this.footerNode){
_45(this.footerNode,this.preparedstore);
}
}
},getChartWidget:function(){
return this.chartWidget;
},getGridWidget:function(){
return this.gridWidget;
},destroy:function(){
this.cancelRefresh();
if(this.chartWidget){
this.chartWidget.destroy();
this.chartWidget=undefined;
}
if(this.legendWidget){
this.legendWidget=undefined;
}
if(this.gridWidget){
this.gridWidget=undefined;
}
if(this.chartNode){
this.chartNode.innerHTML="";
}
if(this.legendNode){
this.legendNode.innerHTML="";
}
if(this.gridNode){
this.gridNode.innerHTML="";
}
if(this.titleNode){
this.titleNode.innerHTML="";
}
if(this.footerNode){
this.footerNode.innerHTML="";
}
}});
})();
}