root / trunk / web / dojo / dojox / widget / DataPresentation.js
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 | } |