299 lines
7.2 KiB
JavaScript
299 lines
7.2 KiB
JavaScript
|
//>>built
|
||
|
define("dojox/charting/action2d/_IndicatorElement",["dojo/_base/lang","dojo/_base/declare","../Element","../plot2d/common","../axis2d/common","dojox/gfx"],function(_1,_2,_3,_4,_5,_6){
|
||
|
var _7=function(_8){
|
||
|
return _9(_8,_8.getShape().text);
|
||
|
};
|
||
|
var _9=function(s,t){
|
||
|
var c=s.declaredClass;
|
||
|
if(c.indexOf("svg")!=-1){
|
||
|
try{
|
||
|
return _1.mixin({},s.rawNode.getBBox());
|
||
|
}
|
||
|
catch(e){
|
||
|
return null;
|
||
|
}
|
||
|
}else{
|
||
|
if(c.indexOf("vml")!=-1){
|
||
|
var _a=s.rawNode,_b=_a.style.display;
|
||
|
_a.style.display="inline";
|
||
|
var w=_6.pt2px(parseFloat(_a.currentStyle.width));
|
||
|
var h=_6.pt2px(parseFloat(_a.currentStyle.height));
|
||
|
var sz={x:0,y:0,width:w,height:h};
|
||
|
_c(s,sz);
|
||
|
_a.style.display=_b;
|
||
|
return sz;
|
||
|
}else{
|
||
|
if(c.indexOf("silverlight")!=-1){
|
||
|
var bb={width:s.rawNode.actualWidth,height:s.rawNode.actualHeight};
|
||
|
return _c(s,bb,0.75);
|
||
|
}else{
|
||
|
if(s.getTextWidth){
|
||
|
var w=s.getTextWidth();
|
||
|
var _d=s.getFont();
|
||
|
var fz=_d?_d.size:_6.defaultFont.size;
|
||
|
var h=_6.normalizedLength(fz);
|
||
|
sz={width:w,height:h};
|
||
|
_c(s,sz,0.75);
|
||
|
return sz;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
var _c=function(s,sz,_e){
|
||
|
var _f=sz.width,_10=sz.height,sh=s.getShape(),_11=sh.align;
|
||
|
switch(_11){
|
||
|
case "end":
|
||
|
sz.x=sh.x-_f;
|
||
|
break;
|
||
|
case "middle":
|
||
|
sz.x=sh.x-_f/2;
|
||
|
break;
|
||
|
case "start":
|
||
|
default:
|
||
|
sz.x=sh.x;
|
||
|
break;
|
||
|
}
|
||
|
_e=_e||1;
|
||
|
sz.y=sh.y-_10*_e;
|
||
|
return sz;
|
||
|
};
|
||
|
return _2("dojox.charting.action2d._IndicatorElement",[_3],{constructor:function(_12,_13){
|
||
|
if(!_13){
|
||
|
_13={};
|
||
|
}
|
||
|
this.inter=_13.inter;
|
||
|
},_updateVisibility:function(cp,_14,_15){
|
||
|
var _16=_15=="x"?this.inter.plot._hAxis:this.inter.plot._vAxis;
|
||
|
var _17=_16.getWindowScale();
|
||
|
this.chart.setAxisWindow(_16.name,_17,_16.getWindowOffset()+(cp[_15]-_14[_15])/_17);
|
||
|
this._noDirty=true;
|
||
|
this.chart.render();
|
||
|
this._noDirty=false;
|
||
|
if(!this._tracker){
|
||
|
this.initTrack();
|
||
|
}
|
||
|
},_trackMove:function(){
|
||
|
this._updateIndicator(this.pageCoord);
|
||
|
if(this._initTrackPhase){
|
||
|
this._initTrackPhase=false;
|
||
|
this._tracker=setInterval(_1.hitch(this,this._trackMove),100);
|
||
|
}
|
||
|
},initTrack:function(){
|
||
|
this._initTrackPhase=true;
|
||
|
this._tracker=setTimeout(_1.hitch(this,this._trackMove),500);
|
||
|
},stopTrack:function(){
|
||
|
if(this._tracker){
|
||
|
if(this._initTrackPhase){
|
||
|
clearTimeout(this._tracker);
|
||
|
}else{
|
||
|
clearInterval(this._tracker);
|
||
|
}
|
||
|
this._tracker=null;
|
||
|
}
|
||
|
},render:function(){
|
||
|
if(!this.isDirty()){
|
||
|
return;
|
||
|
}
|
||
|
this.cleanGroup();
|
||
|
if(!this.pageCoord){
|
||
|
return;
|
||
|
}
|
||
|
this._updateIndicator(this.pageCoord,this.secondCoord);
|
||
|
},_updateIndicator:function(cp1,cp2){
|
||
|
var _18=this.inter,_19=_18.plot,v=_18.opt.vertical;
|
||
|
var _1a=this.chart.getAxis(_19.hAxis),_1b=this.chart.getAxis(_19.vAxis);
|
||
|
var hn=_1a.name,vn=_1b.name,hb=_1a.getScaler().bounds,vb=_1b.getScaler().bounds;
|
||
|
var _1c=v?"x":"y",n=v?hn:vn,_1d=v?hb:vb;
|
||
|
if(cp2){
|
||
|
var tmp;
|
||
|
if(v){
|
||
|
if(cp1.x>cp2.x){
|
||
|
tmp=cp2;
|
||
|
cp2=cp1;
|
||
|
cp1=tmp;
|
||
|
}
|
||
|
}else{
|
||
|
if(cp1.y>cp2.y){
|
||
|
tmp=cp2;
|
||
|
cp2=cp1;
|
||
|
cp1=tmp;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
var cd1=_19.toData(cp1),cd2;
|
||
|
if(cp2){
|
||
|
cd2=_19.toData(cp2);
|
||
|
}
|
||
|
var o={};
|
||
|
o[hn]=hb.from;
|
||
|
o[vn]=vb.from;
|
||
|
var min=_19.toPage(o);
|
||
|
o[hn]=hb.to;
|
||
|
o[vn]=vb.to;
|
||
|
var max=_19.toPage(o);
|
||
|
if(cd1[n]<_1d.from){
|
||
|
if(!cd2&&_18.opt.autoScroll){
|
||
|
this._updateVisibility(cp1,min,_1c);
|
||
|
return;
|
||
|
}else{
|
||
|
cp1[_1c]=min[_1c];
|
||
|
}
|
||
|
cd1=_19.toData(cp1);
|
||
|
}else{
|
||
|
if(cd1[n]>_1d.to){
|
||
|
if(!cd2&&_18.opt.autoScroll){
|
||
|
this._updateVisibility(cp1,max,_1c);
|
||
|
return;
|
||
|
}else{
|
||
|
cp1[_1c]=max[_1c];
|
||
|
}
|
||
|
cd1=_19.toData(cp1);
|
||
|
}
|
||
|
}
|
||
|
var c1=this._getData(cd1,_1c,v),c2;
|
||
|
if(c1.y==null){
|
||
|
return;
|
||
|
}
|
||
|
if(cp2){
|
||
|
if(cd2[n]<_1d.from){
|
||
|
cp2[_1c]=min[_1c];
|
||
|
cd2=_19.toData(cp2);
|
||
|
}else{
|
||
|
if(cd2[n]>_1d.to){
|
||
|
cp2[_1c]=max[_1c];
|
||
|
cd2=_19.toData(cp2);
|
||
|
}
|
||
|
}
|
||
|
c2=this._getData(cd2,_1c,v);
|
||
|
if(c2.y==null){
|
||
|
cp2=null;
|
||
|
}
|
||
|
}
|
||
|
var t1=this._renderIndicator(c1,cp2?1:0,hn,vn,min,max);
|
||
|
if(cp2){
|
||
|
var t2=this._renderIndicator(c2,2,hn,vn,min,max);
|
||
|
var _1e=v?c2.y-c1.y:c2.x-c1.y;
|
||
|
var _1f=_18.opt.labelFunc?_18.opt.labelFunc(c1,c2,_18.opt.fixed,_18.opt.precision):(_4.getLabel(_1e,_18.opt.fixed,_18.opt.precision)+" ("+_4.getLabel(100*_1e/(v?c1.y:c1.x),true,2)+"%)");
|
||
|
this._renderText(_1f,_18,this.chart.theme,v?(t1.x+t2.x)/2:t1.x,v?t1.y:(t1.y+t2.y)/2,c1,c2);
|
||
|
}
|
||
|
},_renderIndicator:function(_20,_21,hn,vn,min,max){
|
||
|
var t=this.chart.theme,c=this.chart.getCoords(),_22=this.inter,_23=_22.plot,v=_22.opt.vertical;
|
||
|
var _24={};
|
||
|
_24[hn]=_20.x;
|
||
|
_24[vn]=_20.y;
|
||
|
_24=_23.toPage(_24);
|
||
|
var cx=_24.x-c.x,cy=_24.y-c.y;
|
||
|
var x1=v?cx:min.x-c.x,y1=v?min.y-c.y:cy,x2=v?x1:max.x-c.x,y2=v?max.y-c.y:y1;
|
||
|
var sh=_22.opt.lineShadow?_22.opt.lineShadow:t.indicator.lineShadow,ls=_22.opt.lineStroke?_22.opt.lineStroke:t.indicator.lineStroke,ol=_22.opt.lineOutline?_22.opt.lineOutline:t.indicator.lineOutline;
|
||
|
if(sh){
|
||
|
this.group.createLine({x1:x1+sh.dx,y1:y1+sh.dy,x2:x2+sh.dx,y2:y2+sh.dy}).setStroke(sh);
|
||
|
}
|
||
|
if(ol){
|
||
|
ol=_4.makeStroke(ol);
|
||
|
ol.width=2*ol.width+ls.width;
|
||
|
this.group.createLine({x1:x1,y1:y1,x2:x2,y2:y2}).setStroke(ol);
|
||
|
}
|
||
|
this.group.createLine({x1:x1,y1:y1,x2:x2,y2:y2}).setStroke(ls);
|
||
|
var ms=_22.opt.markerSymbol?_22.opt.markerSymbol:t.indicator.markerSymbol,_25="M"+cx+" "+cy+" "+ms;
|
||
|
sh=_22.opt.markerShadow?_22.opt.markerShadow:t.indicator.markerShadow;
|
||
|
ls=_22.opt.markerStroke?_22.opt.markerStroke:t.indicator.markerStroke;
|
||
|
ol=_22.opt.markerOutline?_22.opt.markerOutline:t.indicator.markerOutline;
|
||
|
if(sh){
|
||
|
var sp="M"+(cx+sh.dx)+" "+(cy+sh.dy)+" "+ms;
|
||
|
this.group.createPath(sp).setFill(sh.color).setStroke(sh);
|
||
|
}
|
||
|
if(ol){
|
||
|
ol=_4.makeStroke(ol);
|
||
|
ol.width=2*ol.width+ls.width;
|
||
|
this.group.createPath(_25).setStroke(ol);
|
||
|
}
|
||
|
var _26=this.group.createPath(_25);
|
||
|
var sf=this._shapeFill(_22.opt.markerFill?_22.opt.markerFill:t.indicator.markerFill,_26.getBoundingBox());
|
||
|
_26.setFill(sf).setStroke(ls);
|
||
|
if(_21==0){
|
||
|
var _27=_22.opt.labelFunc?_22.opt.labelFunc(_20,null,_22.opt.fixed,_22.opt.precision):_4.getLabel(v?_20.y:_20.x,_22.opt.fixed,_22.opt.precision);
|
||
|
this._renderText(_27,_22,t,v?x1:x2+5,v?y2+5:y1,_20);
|
||
|
}else{
|
||
|
return v?{x:x1,y:y2+5}:{x:x2+5,y:y1};
|
||
|
}
|
||
|
},_renderText:function(_28,_29,t,x,y,c1,c2){
|
||
|
var _2a=_5.createText.gfx(this.chart,this.group,x,y,"middle",_28,_29.opt.font?_29.opt.font:t.indicator.font,_29.opt.fontColor?_29.opt.fontColor:t.indicator.fontColor);
|
||
|
var b=_7(_2a);
|
||
|
b.x-=2;
|
||
|
b.y-=1;
|
||
|
b.width+=4;
|
||
|
b.height+=2;
|
||
|
b.r=_29.opt.radius?_29.opt.radius:t.indicator.radius;
|
||
|
sh=_29.opt.shadow?_29.opt.shadow:t.indicator.shadow;
|
||
|
ls=_29.opt.stroke?_29.opt.stroke:t.indicator.stroke;
|
||
|
ol=_29.opt.outline?_29.opt.outline:t.indicator.outline;
|
||
|
if(sh){
|
||
|
this.group.createRect(b).setFill(sh.color).setStroke(sh);
|
||
|
}
|
||
|
if(ol){
|
||
|
ol=_4.makeStroke(ol);
|
||
|
ol.width=2*ol.width+ls.width;
|
||
|
this.group.createRect(b).setStroke(ol);
|
||
|
}
|
||
|
var f=_29.opt.fillFunc?_29.opt.fillFunc(c1,c2):(_29.opt.fill?_29.opt.fill:t.indicator.fill);
|
||
|
this.group.createRect(b).setFill(this._shapeFill(f,b)).setStroke(ls);
|
||
|
_2a.moveToFront();
|
||
|
},_getData:function(cd,_2b,v){
|
||
|
var _2c=this.chart.getSeries(this.inter.opt.series).data;
|
||
|
var i,r,l=_2c.length;
|
||
|
for(i=0;i<l;++i){
|
||
|
r=_2c[i];
|
||
|
if(r==null){
|
||
|
}else{
|
||
|
if(typeof r=="number"){
|
||
|
if(i+1>cd[_2b]){
|
||
|
break;
|
||
|
}
|
||
|
}else{
|
||
|
if(r[_2b]>cd[_2b]){
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
var x,y,px,py;
|
||
|
if(typeof r=="number"){
|
||
|
x=i+1;
|
||
|
y=r;
|
||
|
if(i>0){
|
||
|
px=i;
|
||
|
py=_2c[i-1];
|
||
|
}
|
||
|
}else{
|
||
|
x=r.x;
|
||
|
y=r.y;
|
||
|
if(i>0){
|
||
|
px=_2c[i-1].x;
|
||
|
py=_2c[i-1].y;
|
||
|
}
|
||
|
}
|
||
|
if(i>0){
|
||
|
var m=v?(x+px)/2:(y+py)/2;
|
||
|
if(cd[_2b]<=m){
|
||
|
x=px;
|
||
|
y=py;
|
||
|
}
|
||
|
}
|
||
|
return {x:x,y:y};
|
||
|
},cleanGroup:function(_2d){
|
||
|
this.inherited(arguments);
|
||
|
this.group.moveToFront();
|
||
|
return this;
|
||
|
},clear:function(){
|
||
|
this.dirty=true;
|
||
|
return this;
|
||
|
},getSeriesStats:function(){
|
||
|
return _1.delegate(_4.defaultStats);
|
||
|
},initializeScalers:function(){
|
||
|
return this;
|
||
|
},isDirty:function(){
|
||
|
return !this._noDirty&&(this.dirty||this.inter.plot.isDirty());
|
||
|
}});
|
||
|
});
|