root / trunk / web / dojo / dojox / widget / DataPresentation.js @ 12
History | View | Annotate | Download (9.92 KB)
| 1 | 9 | andrej.cim | /*
|
|---|---|---|---|
| 2 | Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
|
||
| 3 | Available via Academic Free License >= 2.1 OR the modified BSD license.
|
||
| 4 | see: http://dojotoolkit.org/license for details
|
||
| 5 | */
|
||
| 6 | |||
| 7 | |||
| 8 | if(!dojo._hasResource["dojox.widget.DataPresentation"]){ |
||
| 9 | dojo._hasResource["dojox.widget.DataPresentation"]=true; |
||
| 10 | dojo.provide("dojox.widget.DataPresentation");
|
||
| 11 | dojo.experimental("dojox.widget.DataPresentation");
|
||
| 12 | dojo.require("dojox.grid.DataGrid");
|
||
| 13 | dojo.require("dojox.charting.Chart2D");
|
||
| 14 | dojo.require("dojox.charting.widget.Legend");
|
||
| 15 | dojo.require("dojox.charting.action2d.Tooltip");
|
||
| 16 | dojo.require("dojox.charting.action2d.Highlight");
|
||
| 17 | dojo.require("dojo.colors");
|
||
| 18 | dojo.require("dojo.data.ItemFileWriteStore");
|
||
| 19 | (function(){
|
||
| 20 | var _1=function(_2,_3,_4,_5){ |
||
| 21 | var _6=[];
|
||
| 22 | _6[0]={value:0,text:""}; |
||
| 23 | var _7=_2.length;
|
||
| 24 | if((_4!=="ClusteredBars")&&(_4!=="StackedBars")){ |
||
| 25 | var _8=_5.offsetWidth;
|
||
| 26 | var _9=(""+_2[0]).length*_2.length*7; |
||
| 27 | if(_3==1){ |
||
| 28 | for(var z=1;z<500;++z){ |
||
| 29 | if((_9/z)<_8){
|
||
| 30 | break;
|
||
| 31 | } |
||
| 32 | ++_3; |
||
| 33 | } |
||
| 34 | } |
||
| 35 | } |
||
| 36 | for(var i=0;i<_7;i++){ |
||
| 37 | _6.push({value:i+1,text:(!_3||i%_3)?"":_2[i]});
|
||
| 38 | } |
||
| 39 | _6.push({value:_7+1,text:""});
|
||
| 40 | return _6;
|
||
| 41 | }; |
||
| 42 | var _a=function(_b,_c){ |
||
| 43 | var _d={vertical:false,labels:_c,min:0,max:_c.length-1,majorTickStep:1,minorTickStep:1}; |
||
| 44 | if((_b==="ClusteredBars")||(_b==="StackedBars")){ |
||
| 45 | _d.vertical=true;
|
||
| 46 | } |
||
| 47 | if((_b==="Lines")||(_b==="Areas")||(_b==="StackedAreas")){ |
||
| 48 | _d.min++; |
||
| 49 | _d.max--; |
||
| 50 | } |
||
| 51 | return _d;
|
||
| 52 | }; |
||
| 53 | var _e=function(_f,_10,_11,_12){ |
||
| 54 | var _13={vertical:true,fixLower:"major",fixUpper:"major",natural:true}; |
||
| 55 | if(_10==="secondary"){ |
||
| 56 | _13.leftBottom=false;
|
||
| 57 | } |
||
| 58 | if((_f==="ClusteredBars")||(_f==="StackedBars")){ |
||
| 59 | _13.vertical=false;
|
||
| 60 | } |
||
| 61 | if(_11==_12){
|
||
| 62 | _13.min=_11-1;
|
||
| 63 | _13.max=_12+1;
|
||
| 64 | } |
||
| 65 | return _13;
|
||
| 66 | }; |
||
| 67 | var _14=function(_15,_16,_17){ |
||
| 68 | var _18={type:_15,hAxis:"independent",vAxis:"dependent-"+_16,gap:4,lines:false,areas:false,markers:false}; |
||
| 69 | if((_15==="ClusteredBars")||(_15==="StackedBars")){ |
||
| 70 | _18.hAxis=_18.vAxis; |
||
| 71 | _18.vAxis="independent";
|
||
| 72 | } |
||
| 73 | if((_15==="Lines")||(_15==="Hybrid-Lines")||(_15==="Areas")||(_15==="StackedAreas")){ |
||
| 74 | _18.lines=true;
|
||
| 75 | } |
||
| 76 | if((_15==="Areas")||(_15==="StackedAreas")){ |
||
| 77 | _18.areas=true;
|
||
| 78 | } |
||
| 79 | if(_15==="Lines"){ |
||
| 80 | _18.markers=true;
|
||
| 81 | } |
||
| 82 | if(_15==="Hybrid-Lines"){ |
||
| 83 | _18.shadows={dx:2,dy:2,dw:2};
|
||
| 84 | _18.type="Lines";
|
||
| 85 | } |
||
| 86 | if(_15==="Hybrid-ClusteredColumns"){ |
||
| 87 | _18.type="ClusteredColumns";
|
||
| 88 | } |
||
| 89 | if(_17){
|
||
| 90 | _18.animate=_17; |
||
| 91 | } |
||
| 92 | return _18;
|
||
| 93 | }; |
||
| 94 | var _19=function(_1a,_1b,_1c,_1d,_1e,_1f,_20,_21,_22,_23,_24){ |
||
| 95 | var _25=_1b;
|
||
| 96 | if(!_25){
|
||
| 97 | _1a.innerHTML="";
|
||
| 98 | _25=new dojox.charting.Chart2D(_1a);
|
||
| 99 | } |
||
| 100 | if(_20){
|
||
| 101 | _20._clone=function(){ |
||
| 102 | var _26=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)}); |
||
| 103 | _26.markers=this.markers;
|
||
| 104 | _26._buildMarkerArray(); |
||
| 105 | return _26;
|
||
| 106 | }; |
||
| 107 | _25.setTheme(_20); |
||
| 108 | } |
||
| 109 | var _27=_22.series_data[0].slice(0); |
||
| 110 | if(_1d){
|
||
| 111 | _27.reverse(); |
||
| 112 | } |
||
| 113 | var _28=_1(_27,_1f,_1c,_1a);
|
||
| 114 | var _29={};
|
||
| 115 | var _2a=null; |
||
| 116 | var _2b=null; |
||
| 117 | var _2c={};
|
||
| 118 | for(var _2d in _25.runs){ |
||
| 119 | _2c[_2d]=true;
|
||
| 120 | } |
||
| 121 | var _2e=_22.series_name.length;
|
||
| 122 | for(var i=0;i<_2e;i++){ |
||
| 123 | if(_22.series_chart[i]&&(_22.series_data[i].length>0)){ |
||
| 124 | var _2f=_1c;
|
||
| 125 | var _30=_22.series_axis[i];
|
||
| 126 | if(_2f=="Hybrid"){ |
||
| 127 | if(_22.series_charttype[i]=="line"){ |
||
| 128 | _2f="Hybrid-Lines";
|
||
| 129 | }else{
|
||
| 130 | _2f="Hybrid-ClusteredColumns";
|
||
| 131 | } |
||
| 132 | } |
||
| 133 | if(!_29[_30]){
|
||
| 134 | _29[_30]={};
|
||
| 135 | } |
||
| 136 | if(!_29[_30][_2f]){
|
||
| 137 | var _31=_30+"-"+_2f; |
||
| 138 | _25.addPlot(_31,_14(_2f,_30,_1e)); |
||
| 139 | var _32={};
|
||
| 140 | if(typeof _21=="string"){ |
||
| 141 | _32.text=function(o){ |
||
| 142 | var _33=[o.element,o.run.name,_27[o.index],((_2f==="ClusteredBars")||(_2f==="StackedBars"))?o.x:o.y]; |
||
| 143 | return dojo.replace(_21,_33);
|
||
| 144 | }; |
||
| 145 | }else{
|
||
| 146 | if(typeof _21=="function"){ |
||
| 147 | _32.text=_21; |
||
| 148 | } |
||
| 149 | } |
||
| 150 | new dojox.charting.action2d.Tooltip(_25,_31,_32);
|
||
| 151 | if(_2f!=="Lines"&&_2f!=="Hybrid-Lines"){ |
||
| 152 | new dojox.charting.action2d.Highlight(_25,_31);
|
||
| 153 | } |
||
| 154 | _29[_30][_2f]=true;
|
||
| 155 | } |
||
| 156 | var _34=[];
|
||
| 157 | var _35=_22.series_data[i].length;
|
||
| 158 | for(var j=0;j<_35;j++){ |
||
| 159 | var val=_22.series_data[i][j];
|
||
| 160 | _34.push(val); |
||
| 161 | if(_2a===null||val>_2a){ |
||
| 162 | _2a=val; |
||
| 163 | } |
||
| 164 | if(_2b===null||val<_2b){ |
||
| 165 | _2b=val; |
||
| 166 | } |
||
| 167 | } |
||
| 168 | if(_1d){
|
||
| 169 | _34.reverse(); |
||
| 170 | } |
||
| 171 | var _36={plot:_30+"-"+_2f}; |
||
| 172 | if(_22.series_linestyle[i]){
|
||
| 173 | _36.stroke={style:_22.series_linestyle[i]};
|
||
| 174 | } |
||
| 175 | _25.addSeries(_22.series_name[i],_34,_36); |
||
| 176 | delete _2c[_22.series_name[i]];
|
||
| 177 | } |
||
| 178 | } |
||
| 179 | for(_2d in _2c){ |
||
| 180 | _25.removeSeries(_2d); |
||
| 181 | } |
||
| 182 | _25.addAxis("independent",_a(_1c,_28));
|
||
| 183 | _25.addAxis("dependent-primary",_e(_1c,"primary",_2b,_2a)); |
||
| 184 | _25.addAxis("dependent-secondary",_e(_1c,"secondary",_2b,_2a)); |
||
| 185 | return _25;
|
||
| 186 | }; |
||
| 187 | var _37=function(_38,_39,_3a,_3b){ |
||
| 188 | var _3c=_39;
|
||
| 189 | if(!_3c){
|
||
| 190 | _3c=new dojox.charting.widget.Legend({chart:_3a,horizontal:_3b},_38); |
||
| 191 | }else{
|
||
| 192 | _3c.refresh(); |
||
| 193 | } |
||
| 194 | return _3c;
|
||
| 195 | }; |
||
| 196 | var _3d=function(_3e,_3f,_40,_41,_42){ |
||
| 197 | var _43=_3f||new dojox.grid.DataGrid({},_3e); |
||
| 198 | _43.startup(); |
||
| 199 | _43.setStore(_40,_41,_42); |
||
| 200 | var _44=[];
|
||
| 201 | for(var ser=0;ser<_40.series_name.length;ser++){ |
||
| 202 | if(_40.series_grid[ser]&&(_40.series_data[ser].length>0)){ |
||
| 203 | _44.push({field:"data."+ser,name:_40.series_name[ser],width:"auto",formatter:_40.series_gridformatter[ser]});
|
||
| 204 | } |
||
| 205 | } |
||
| 206 | _43.setStructure(_44); |
||
| 207 | return _43;
|
||
| 208 | }; |
||
| 209 | var _45=function(_46,_47){ |
||
| 210 | if(_47.title){
|
||
| 211 | _46.innerHTML=_47.title; |
||
| 212 | } |
||
| 213 | }; |
||
| 214 | var _48=function(_49,_4a){ |
||
| 215 | if(_4a.footer){
|
||
| 216 | _49.innerHTML=_4a.footer; |
||
| 217 | } |
||
| 218 | }; |
||
| 219 | var _4b=function(_4c,_4d){ |
||
| 220 | var _4e=_4c;
|
||
| 221 | if(_4d){
|
||
| 222 | var _4f=_4d.split(/[.\[\]]+/); |
||
| 223 | for(var _50 in _4f){ |
||
| 224 | if(_4e){
|
||
| 225 | _4e=_4e[_4f[_50]]; |
||
| 226 | } |
||
| 227 | } |
||
| 228 | } |
||
| 229 | return _4e;
|
||
| 230 | }; |
||
| 231 | dojo.declare("dojox.widget.DataPresentation",null,{type:"chart",chartType:"clusteredBars",reverse:false,animate:null,labelMod:1,legendHorizontal:true,constructor:function(_51,_52){ |
||
| 232 | dojo.mixin(this,_52);
|
||
| 233 | this.domNode=dojo.byId(_51);
|
||
| 234 | this[this.type+"Node"]=this.domNode; |
||
| 235 | if(typeof this.theme=="string"){ |
||
| 236 | this.theme=dojo.getObject(this.theme); |
||
| 237 | } |
||
| 238 | this.chartNode=dojo.byId(this.chartNode); |
||
| 239 | this.legendNode=dojo.byId(this.legendNode); |
||
| 240 | this.gridNode=dojo.byId(this.gridNode); |
||
| 241 | this.titleNode=dojo.byId(this.titleNode); |
||
| 242 | this.footerNode=dojo.byId(this.footerNode); |
||
| 243 | if(this.legendVertical){ |
||
| 244 | this.legendHorizontal=!this.legendVertical; |
||
| 245 | } |
||
| 246 | if(this.url){ |
||
| 247 | this.setURL(null,null,this.refreshInterval); |
||
| 248 | }else{
|
||
| 249 | if(this.data){ |
||
| 250 | this.setData(null,this.refreshInterval); |
||
| 251 | }else{
|
||
| 252 | this.setStore();
|
||
| 253 | } |
||
| 254 | } |
||
| 255 | },setURL:function(url,_53,_54){ |
||
| 256 | if(_54){
|
||
| 257 | this.cancelRefresh();
|
||
| 258 | } |
||
| 259 | this.url=url||this.url; |
||
| 260 | this.urlContent=_53||this.urlContent; |
||
| 261 | this.refreshInterval=_54||this.refreshInterval; |
||
| 262 | var me=this; |
||
| 263 | dojo.xhrGet({url:this.url,content:this.urlContent,handleAs:"json-comment-optional",load:function(_55,_56){
|
||
| 264 | me.setData(_55); |
||
| 265 | },error:function(xhr,_57){ |
||
| 266 | if(me.urlError&&(typeof me.urlError=="function")){ |
||
| 267 | me.urlError(xhr,_57); |
||
| 268 | } |
||
| 269 | }}); |
||
| 270 | if(_54&&(this.refreshInterval>0)){ |
||
| 271 | this.refreshIntervalPending=setInterval(function(){ |
||
| 272 | me.setURL(); |
||
| 273 | },this.refreshInterval);
|
||
| 274 | } |
||
| 275 | },setData:function(_58,_59){ |
||
| 276 | if(_59){
|
||
| 277 | this.cancelRefresh();
|
||
| 278 | } |
||
| 279 | this.data=_58||this.data; |
||
| 280 | this.refreshInterval=_59||this.refreshInterval; |
||
| 281 | var _5a=(typeof this.series=="function")?this.series(this.data):this.series; |
||
| 282 | var _5b=[],_5c=[],_5d=[],_5e=[],_5f=[],_60=[],_61=[],_62=[],_63=[],_64=0; |
||
| 283 | for(var ser=0;ser<_5a.length;ser++){ |
||
| 284 | _5b[ser]=_4b(this.data,_5a[ser].datapoints);
|
||
| 285 | if(_5b[ser]&&(_5b[ser].length>_64)){
|
||
| 286 | _64=_5b[ser].length; |
||
| 287 | } |
||
| 288 | _5c[ser]=[]; |
||
| 289 | _5d[ser]=_5a[ser].name||(_5a[ser].namefield?_4b(this.data,_5a[ser].namefield):null)||("series "+ser); |
||
| 290 | _5e[ser]=(_5a[ser].chart!==false);
|
||
| 291 | _5f[ser]=_5a[ser].charttype||"bar";
|
||
| 292 | _60[ser]=_5a[ser].linestyle; |
||
| 293 | _61[ser]=_5a[ser].axis||"primary";
|
||
| 294 | _62[ser]=(_5a[ser].grid!==false);
|
||
| 295 | _63[ser]=_5a[ser].gridformatter; |
||
| 296 | } |
||
| 297 | var _65,_66,_67,_68;
|
||
| 298 | var _69=[];
|
||
| 299 | for(_65=0;_65<_64;_65++){ |
||
| 300 | _66={index:_65};
|
||
| 301 | for(ser=0;ser<_5a.length;ser++){ |
||
| 302 | if(_5b[ser]&&(_5b[ser].length>_65)){
|
||
| 303 | _67=_4b(_5b[ser][_65],_5a[ser].field); |
||
| 304 | if(_5e[ser]){
|
||
| 305 | _68=parseFloat(_67); |
||
| 306 | if(!isNaN(_68)){
|
||
| 307 | _67=_68; |
||
| 308 | } |
||
| 309 | } |
||
| 310 | _66["data."+ser]=_67;
|
||
| 311 | _5c[ser].push(_67); |
||
| 312 | } |
||
| 313 | } |
||
| 314 | _69.push(_66); |
||
| 315 | } |
||
| 316 | if(_64<=0){ |
||
| 317 | _69.push({index:0});
|
||
| 318 | } |
||
| 319 | var _6a=new dojo.data.ItemFileWriteStore({data:{identifier:"index",items:_69}}); |
||
| 320 | if(this.data.title){ |
||
| 321 | _6a.title=this.data.title;
|
||
| 322 | } |
||
| 323 | if(this.data.footer){ |
||
| 324 | _6a.footer=this.data.footer;
|
||
| 325 | } |
||
| 326 | _6a.series_data=_5c; |
||
| 327 | _6a.series_name=_5d; |
||
| 328 | _6a.series_chart=_5e; |
||
| 329 | _6a.series_charttype=_5f; |
||
| 330 | _6a.series_linestyle=_60; |
||
| 331 | _6a.series_axis=_61; |
||
| 332 | _6a.series_grid=_62; |
||
| 333 | _6a.series_gridformatter=_63; |
||
| 334 | this.setPreparedStore(_6a);
|
||
| 335 | if(_59&&(this.refreshInterval>0)){ |
||
| 336 | var me=this; |
||
| 337 | this.refreshIntervalPending=setInterval(function(){ |
||
| 338 | me.setData(); |
||
| 339 | },this.refreshInterval);
|
||
| 340 | } |
||
| 341 | },refresh:function(){ |
||
| 342 | if(this.url){ |
||
| 343 | this.setURL(this.url,this.urlContent,this.refreshInterval); |
||
| 344 | }else{
|
||
| 345 | if(this.data){ |
||
| 346 | this.setData(this.data,this.refreshInterval); |
||
| 347 | } |
||
| 348 | } |
||
| 349 | },cancelRefresh:function(){ |
||
| 350 | if(this.refreshIntervalPending){ |
||
| 351 | clearInterval(this.refreshIntervalPending);
|
||
| 352 | this.refreshIntervalPending=undefined; |
||
| 353 | } |
||
| 354 | },setStore:function(_6b,_6c,_6d){ |
||
| 355 | this.setPreparedStore(_6b,_6c,_6d);
|
||
| 356 | },setPreparedStore:function(_6e,_6f,_70){ |
||
| 357 | this.preparedstore=_6e||this.store; |
||
| 358 | this.query=_6f||this.query; |
||
| 359 | this.queryOptions=_70||this.queryOptions; |
||
| 360 | if(this.preparedstore){ |
||
| 361 | if(this.chartNode){ |
||
| 362 | this.chartWidget=_19(this.chartNode,this.chartWidget,this.chartType,this.reverse,this.animate,this.labelMod,this.theme,this.tooltip,this.preparedstore,this.query,this,_70); |
||
| 363 | this.renderChartWidget();
|
||
| 364 | } |
||
| 365 | if(this.legendNode){ |
||
| 366 | this.legendWidget=_37(this.legendNode,this.legendWidget,this.chartWidget,this.legendHorizontal); |
||
| 367 | } |
||
| 368 | if(this.gridNode){ |
||
| 369 | this.gridWidget=_3d(this.gridNode,this.gridWidget,this.preparedstore,this.query,this.queryOptions); |
||
| 370 | this.renderGridWidget();
|
||
| 371 | } |
||
| 372 | if(this.titleNode){ |
||
| 373 | _45(this.titleNode,this.preparedstore); |
||
| 374 | } |
||
| 375 | if(this.footerNode){ |
||
| 376 | _48(this.footerNode,this.preparedstore); |
||
| 377 | } |
||
| 378 | } |
||
| 379 | },renderChartWidget:function(){ |
||
| 380 | if(this.chartWidget){ |
||
| 381 | this.chartWidget.render();
|
||
| 382 | } |
||
| 383 | },renderGridWidget:function(){ |
||
| 384 | if(this.gridWidget){ |
||
| 385 | this.gridWidget.render();
|
||
| 386 | } |
||
| 387 | },getChartWidget:function(){ |
||
| 388 | return this.chartWidget; |
||
| 389 | },getGridWidget:function(){ |
||
| 390 | return this.gridWidget; |
||
| 391 | },destroy:function(){ |
||
| 392 | this.cancelRefresh();
|
||
| 393 | if(this.chartWidget){ |
||
| 394 | this.chartWidget.destroy();
|
||
| 395 | delete this.chartWidget; |
||
| 396 | } |
||
| 397 | if(this.legendWidget){ |
||
| 398 | delete this.legendWidget; |
||
| 399 | } |
||
| 400 | if(this.gridWidget){ |
||
| 401 | delete this.gridWidget; |
||
| 402 | } |
||
| 403 | if(this.chartNode){ |
||
| 404 | this.chartNode.innerHTML=""; |
||
| 405 | } |
||
| 406 | if(this.legendNode){ |
||
| 407 | this.legendNode.innerHTML=""; |
||
| 408 | } |
||
| 409 | if(this.gridNode){ |
||
| 410 | this.gridNode.innerHTML=""; |
||
| 411 | } |
||
| 412 | if(this.titleNode){ |
||
| 413 | this.titleNode.innerHTML=""; |
||
| 414 | } |
||
| 415 | if(this.footerNode){ |
||
| 416 | this.footerNode.innerHTML=""; |
||
| 417 | } |
||
| 418 | }}); |
||
| 419 | })(); |
||
| 420 | } |