Project

General

Profile

Statistics
| Revision:

root / trunk / web / dojo / dojox / widget / DataPresentation.js @ 11

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
}