//>>built define("dojox/charting/Chart",["../main","dojo/_base/lang","dojo/_base/array","dojo/_base/declare","dojo/dom-style","dojo/dom","dojo/dom-geometry","dojo/dom-construct","dojo/_base/Color","dojo/_base/sniff","./Element","./SimpleTheme","./Series","./axis2d/common","dojox/gfx/shape","dojox/gfx","dojox/lang/functional","dojox/lang/functional/fold","dojox/lang/functional/reversed"],function(_1,_2,_3,_4,_5,_6,_7,_8,_9,_a,_b,_c,_d,_e,_f,g,_10,_11,_12){ var dc=_2.getObject("charting",true,_1),_13=_10.lambda("item.clear()"),_14=_10.lambda("item.purgeGroup()"),_15=_10.lambda("item.destroy()"),_16=_10.lambda("item.dirty = false"),_17=_10.lambda("item.dirty = true"),_18=_10.lambda("item.name"); var _19=_4("dojox.charting.Chart",null,{constructor:function(_1a,_1b){ if(!_1b){ _1b={}; } this.margins=_1b.margins?_1b.margins:{l:10,t:10,r:10,b:10}; this.stroke=_1b.stroke; this.fill=_1b.fill; this.delayInMs=_1b.delayInMs||200; this.title=_1b.title; this.titleGap=_1b.titleGap; this.titlePos=_1b.titlePos; this.titleFont=_1b.titleFont; this.titleFontColor=_1b.titleFontColor; this.chartTitle=null; this.theme=null; this.axes={}; this.stack=[]; this.plots={}; this.series=[]; this.runs={}; this.dirty=true; this.node=_6.byId(_1a); var box=_7.getMarginBox(_1a); this.surface=g.createSurface(this.node,box.w||400,box.h||300); if(this.surface.declaredClass.indexOf("vml")==-1){ this.plotGroup=this.surface.createGroup(); } },destroy:function(){ _3.forEach(this.series,_15); _3.forEach(this.stack,_15); _10.forIn(this.axes,_15); if(this.chartTitle&&this.chartTitle.tagName){ _8.destroy(this.chartTitle); } if(this.plotGroup){ this.plotGroup.destroy(); } this.surface.destroy(); },getCoords:function(){ var _1c=this.node; var s=_5.getComputedStyle(_1c),_1d=_7.getMarginBox(_1c,s); var abs=_7.position(_1c,true); _1d.x=abs.x; _1d.y=abs.y; return _1d; },setTheme:function(_1e){ this.theme=_1e.clone(); this.dirty=true; return this; },addAxis:function(_1f,_20){ var _21,_22=_20&&_20.type||"Default"; if(typeof _22=="string"){ if(!dc.axis2d||!dc.axis2d[_22]){ throw Error("Can't find axis: "+_22+" - Check "+"require() dependencies."); } _21=new dc.axis2d[_22](this,_20); }else{ _21=new _22(this,_20); } _21.name=_1f; _21.dirty=true; if(_1f in this.axes){ this.axes[_1f].destroy(); } this.axes[_1f]=_21; this.dirty=true; return this; },getAxis:function(_23){ return this.axes[_23]; },removeAxis:function(_24){ if(_24 in this.axes){ this.axes[_24].destroy(); delete this.axes[_24]; this.dirty=true; } return this; },addPlot:function(_25,_26){ var _27,_28=_26&&_26.type||"Default"; if(typeof _28=="string"){ if(!dc.plot2d||!dc.plot2d[_28]){ throw Error("Can't find plot: "+_28+" - didn't you forget to dojo"+".require() it?"); } _27=new dc.plot2d[_28](this,_26); }else{ _27=new _28(this,_26); } _27.name=_25; _27.dirty=true; if(_25 in this.plots){ this.stack[this.plots[_25]].destroy(); this.stack[this.plots[_25]]=_27; }else{ this.plots[_25]=this.stack.length; this.stack.push(_27); } this.dirty=true; return this; },getPlot:function(_29){ return this.stack[this.plots[_29]]; },removePlot:function(_2a){ if(_2a in this.plots){ var _2b=this.plots[_2a]; delete this.plots[_2a]; this.stack[_2b].destroy(); this.stack.splice(_2b,1); _10.forIn(this.plots,function(idx,_2c,_2d){ if(idx>_2b){ _2d[_2c]=idx-1; } }); var ns=_3.filter(this.series,function(run){ return run.plot!=_2a; }); if(ns.length_43){ _45[_44]=idx-1; } }); this.dirty=true; } return this; },updateSeries:function(_46,_47,_48){ if(_46 in this.runs){ var run=this.series[this.runs[_46]]; run.update(_47); if(_48){ this.dirty=true; }else{ this._invalidateDependentPlots(run.plot,false); this._invalidateDependentPlots(run.plot,true); } } return this; },getSeriesOrder:function(_49){ return _10.map(_10.filter(this.series,function(run){ return run.plot==_49; }),_18); },setSeriesOrder:function(_4a){ var _4b,_4c={},_4d=_10.filter(_4a,function(_4e){ if(!(_4e in this.runs)||(_4e in _4c)){ return false; } var run=this.series[this.runs[_4e]]; if(_4b){ if(run.plot!=_4b){ return false; } }else{ _4b=run.plot; } _4c[_4e]=1; return true; },this); _10.forEach(this.series,function(run){ var _4f=run.name; if(!(_4f in _4c)&&run.plot==_4b){ _4d.push(_4f); } }); var _50=_10.map(_4d,function(_51){ return this.series[this.runs[_51]]; },this); this.series=_50.concat(_10.filter(this.series,function(run){ return run.plot!=_4b; })); _10.forEach(this.series,function(run,i){ this.runs[run.name]=i; },this); this.dirty=true; return this; },moveSeriesToFront:function(_52){ if(_52 in this.runs){ var _53=this.runs[_52],_54=this.getSeriesOrder(this.series[_53].plot); if(_52!=_54[0]){ _54.splice(_53,1); _54.unshift(_52); return this.setSeriesOrder(_54); } } return this; },moveSeriesToBack:function(_55){ if(_55 in this.runs){ var _56=this.runs[_55],_57=this.getSeriesOrder(this.series[_56].plot); if(_55!=_57[_57.length-1]){ _57.splice(_56,1); _57.push(_55); return this.setSeriesOrder(_57); } } return this; },resize:function(_58,_59){ var box; switch(arguments.length){ case 1: box=_2.mixin({},_58); _7.setMarginBox(this.node,box); break; case 2: box={w:_58,h:_59}; _7.setMarginBox(this.node,box); break; } box=_7.getMarginBox(this.node); var d=this.surface.getDimensions(); if(d.width!=box.w||d.height!=box.h){ this.surface.setDimensions(box.w,box.h); this.dirty=true; return this.render(); }else{ return this; } },getGeometry:function(){ var ret={}; _10.forIn(this.axes,function(_5a){ if(_5a.initialized()){ ret[_5a.name]={name:_5a.name,vertical:_5a.vertical,scaler:_5a.scaler,ticks:_5a.ticks}; } }); return ret; },setAxisWindow:function(_5b,_5c,_5d,_5e){ var _5f=this.axes[_5b]; if(_5f){ _5f.setWindow(_5c,_5d); _3.forEach(this.stack,function(_60){ if(_60.hAxis==_5b||_60.vAxis==_5b){ _60.zoom=_5e; } }); } return this; },setWindow:function(sx,sy,dx,dy,_61){ if(!("plotArea" in this)){ this.calculateGeometry(); } _10.forIn(this.axes,function(_62){ var _63,_64,_65=_62.getScaler().bounds,s=_65.span/(_65.upper-_65.lower); if(_62.vertical){ _63=sy; _64=dy/s/_63; }else{ _63=sx; _64=dx/s/_63; } _62.setWindow(_63,_64); }); _3.forEach(this.stack,function(_66){ _66.zoom=_61; }); return this; },zoomIn:function(_67,_68,_69){ var _6a=this.axes[_67]; if(_6a){ var _6b,_6c,_6d=_6a.getScaler().bounds; var _6e=Math.min(_68[0],_68[1]); var _6f=Math.max(_68[0],_68[1]); _6e=_68[0]<_6d.lower?_6d.lower:_6e; _6f=_68[1]>_6d.upper?_6d.upper:_6f; _6b=(_6d.upper-_6d.lower)/(_6f-_6e); _6c=_6e-_6d.lower; this.setAxisWindow(_67,_6b,_6c); if(_69){ this.delayedRender(); }else{ this.render(); } } },calculateGeometry:function(){ if(this.dirty){ return this.fullGeometry(); } var _70=_3.filter(this.stack,function(_71){ return _71.dirty||(_71.hAxis&&this.axes[_71.hAxis].dirty)||(_71.vAxis&&this.axes[_71.vAxis].dirty); },this); _72(_70,this.plotArea); return this; },fullGeometry:function(){ this._makeDirty(); _3.forEach(this.stack,_13); if(!this.theme){ this.setTheme(new _c()); } _3.forEach(this.series,function(run){ if(!(run.plot in this.plots)){ if(!dc.plot2d||!dc.plot2d.Default){ throw Error("Can't find plot: Default - didn't you forget to dojo"+".require() it?"); } var _73=new dc.plot2d.Default(this,{}); _73.name=run.plot; this.plots[run.plot]=this.stack.length; this.stack.push(_73); } this.stack[this.plots[run.plot]].addSeries(run); },this); _3.forEach(this.stack,function(_74){ if(_74.assignAxes){ _74.assignAxes(this.axes); } },this); var dim=this.dim=this.surface.getDimensions(); dim.width=g.normalizedLength(dim.width); dim.height=g.normalizedLength(dim.height); _10.forIn(this.axes,_13); _72(this.stack,dim); var _75=this.offsets={l:0,r:0,t:0,b:0}; _10.forIn(this.axes,function(_76){ _10.forIn(_76.getOffsets(),function(o,i){ _75[i]=Math.max(o,_75[i]); }); }); if(this.title){ this.titleGap=(this.titleGap==0)?0:this.titleGap||this.theme.chart.titleGap||20; this.titlePos=this.titlePos||this.theme.chart.titlePos||"top"; this.titleFont=this.titleFont||this.theme.chart.titleFont; this.titleFontColor=this.titleFontColor||this.theme.chart.titleFontColor||"black"; var _77=g.normalizedLength(g.splitFontString(this.titleFont).size); _75[this.titlePos=="top"?"t":"b"]+=(_77+this.titleGap); } _10.forIn(this.margins,function(o,i){ _75[i]+=o; }); this.plotArea={width:dim.width-_75.l-_75.r,height:dim.height-_75.t-_75.b}; _10.forIn(this.axes,_13); _72(this.stack,this.plotArea); return this; },render:function(){ if(this._delayedRenderHandle){ clearTimeout(this._delayedRenderHandle); this._delayedRenderHandle=null; } if(this.theme){ this.theme.clear(); } if(this.dirty){ return this.fullRender(); } this.calculateGeometry(); _10.forEachRev(this.stack,function(_78){ _78.render(this.dim,this.offsets); },this); _10.forIn(this.axes,function(_79){ _79.render(this.dim,this.offsets); },this); this._makeClean(); return this; },fullRender:function(){ this.fullGeometry(); var _7a=this.offsets,dim=this.dim; var w=Math.max(0,dim.width-_7a.l-_7a.r),h=Math.max(0,dim.height-_7a.t-_7a.b); _3.forEach(this.series,_14); _10.forIn(this.axes,_14); _3.forEach(this.stack,_14); var _7b=this.surface.children; for(var i=0;i<_7b.length;++i){ _f.dispose(_7b[i]); } if(this.chartTitle&&this.chartTitle.tagName){ _8.destroy(this.chartTitle); } if(this.plotGroup){ this.plotGroup.clear(); } this.surface.clear(); this.chartTitle=null; if(this.plotGroup){ this._renderChartBackground(dim,_7a); this._renderPlotBackground(dim,_7a,w,h); this.surface.add(this.plotGroup); this.plotGroup.setClip({x:_7a.l,y:_7a.t,width:w,height:h}); }else{ this._renderPlotBackground(dim,_7a,w,h); } _10.foldr(this.stack,function(z,_7c){ return _7c.render(dim,_7a),0; },0); if(!this.plotGroup){ this._renderChartBackground(dim,_7a); } if(this.title){ var _7d=(g.renderer=="canvas"),_7e=_7d||!_a("ie")&&!_a("opera")?"html":"gfx",_7f=g.normalizedLength(g.splitFontString(this.titleFont).size); this.chartTitle=_e.createText[_7e](this,this.surface,dim.width/2,this.titlePos=="top"?_7f+this.margins.t:dim.height-this.margins.b,"middle",this.title,this.titleFont,this.titleFontColor); } _10.forIn(this.axes,function(_80){ _80.render(dim,_7a); }); this._makeClean(); return this; },_renderChartBackground:function(dim,_81){ var t=this.theme,_82; var _83=this.fill!==undefined?this.fill:(t.chart&&t.chart.fill); var _84=this.stroke!==undefined?this.stroke:(t.chart&&t.chart.stroke); if(_83=="inherit"){ var _85=this.node; _83=new _9(_5.get(_85,"backgroundColor")); while(_83.a==0&&_85!=document.documentElement){ _83=new _9(_5.get(_85,"backgroundColor")); _85=_85.parentNode; } } if(_83){ if(this.plotGroup){ _83=_b.prototype._shapeFill(_b.prototype._plotFill(_83,dim),{x:0,y:0,width:dim.width+1,height:dim.height+1}); this.surface.createRect({width:dim.width+1,height:dim.height+1}).setFill(_83); }else{ _83=_b.prototype._plotFill(_83,dim,_81); if(_81.l){ _82={x:0,y:0,width:_81.l,height:dim.height+1}; this.surface.createRect(_82).setFill(_b.prototype._shapeFill(_83,_82)); } if(_81.r){ _82={x:dim.width-_81.r,y:0,width:_81.r+1,height:dim.height+2}; this.surface.createRect(_82).setFill(_b.prototype._shapeFill(_83,_82)); } if(_81.t){ _82={x:0,y:0,width:dim.width+1,height:_81.t}; this.surface.createRect(_82).setFill(_b.prototype._shapeFill(_83,_82)); } if(_81.b){ _82={x:0,y:dim.height-_81.b,width:dim.width+1,height:_81.b+2}; this.surface.createRect(_82).setFill(_b.prototype._shapeFill(_83,_82)); } } } if(_84){ this.surface.createRect({width:dim.width-1,height:dim.height-1}).setStroke(_84); } },_renderPlotBackground:function(dim,_86,w,h){ var t=this.theme; var _87=t.plotarea&&t.plotarea.fill; var _88=t.plotarea&&t.plotarea.stroke; var _89={x:_86.l-1,y:_86.t-1,width:w+2,height:h+2}; if(_87){ _87=_b.prototype._shapeFill(_b.prototype._plotFill(_87,dim,_86),_89); this.surface.createRect(_89).setFill(_87); } if(_88){ this.surface.createRect({x:_86.l,y:_86.t,width:w+1,height:h+1}).setStroke(_88); } },delayedRender:function(){ if(!this._delayedRenderHandle){ this._delayedRenderHandle=setTimeout(_2.hitch(this,function(){ this.render(); }),this.delayInMs); } return this; },connectToPlot:function(_8a,_8b,_8c){ return _8a in this.plots?this.stack[this.plots[_8a]].connect(_8b,_8c):null; },fireEvent:function(_8d,_8e,_8f){ if(_8d in this.runs){ var _90=this.series[this.runs[_8d]].plot; if(_90 in this.plots){ var _91=this.stack[this.plots[_90]]; if(_91){ _91.fireEvent(_8d,_8e,_8f); } } } return this; },_makeClean:function(){ _3.forEach(this.axes,_16); _3.forEach(this.stack,_16); _3.forEach(this.series,_16); this.dirty=false; },_makeDirty:function(){ _3.forEach(this.axes,_17); _3.forEach(this.stack,_17); _3.forEach(this.series,_17); this.dirty=true; },_invalidateDependentPlots:function(_92,_93){ if(_92 in this.plots){ var _94=this.stack[this.plots[_92]],_95,_96=_93?"vAxis":"hAxis"; if(_94[_96]){ _95=this.axes[_94[_96]]; if(_95&&_95.dependOnData()){ _95.dirty=true; _3.forEach(this.stack,function(p){ if(p[_96]&&p[_96]==_94[_96]){ p.dirty=true; } }); } }else{ _94.dirty=true; } } }}); function _97(_98){ return {min:_98.hmin,max:_98.hmax}; }; function _99(_9a){ return {min:_9a.vmin,max:_9a.vmax}; }; function _9b(_9c,h){ _9c.hmin=h.min; _9c.hmax=h.max; }; function _9d(_9e,v){ _9e.vmin=v.min; _9e.vmax=v.max; }; function _9f(_a0,_a1){ if(_a0&&_a1){ _a0.min=Math.min(_a0.min,_a1.min); _a0.max=Math.max(_a0.max,_a1.max); } return _a0||_a1; }; function _72(_a2,_a3){ var _a4={},_a5={}; _3.forEach(_a2,function(_a6){ var _a7=_a4[_a6.name]=_a6.getSeriesStats(); if(_a6.hAxis){ _a5[_a6.hAxis]=_9f(_a5[_a6.hAxis],_97(_a7)); } if(_a6.vAxis){ _a5[_a6.vAxis]=_9f(_a5[_a6.vAxis],_99(_a7)); } }); _3.forEach(_a2,function(_a8){ var _a9=_a4[_a8.name]; if(_a8.hAxis){ _9b(_a9,_a5[_a8.hAxis]); } if(_a8.vAxis){ _9d(_a9,_a5[_a8.vAxis]); } _a8.initializeScalers(_a3,_a9); }); }; return _19; });