Project

General

Profile

Statistics
| Revision:

root / trunk / web / dojo / dojox / charting / action2d / Tooltip.js @ 9

History | View | Annotate | Download (5.96 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.charting.action2d.Tooltip"]){
9
dojo._hasResource["dojox.charting.action2d.Tooltip"]=true;
10
dojo.provide("dojox.charting.action2d.Tooltip");
11
dojo.require("dojox.charting.action2d.Base");
12
dojo.require("dojox.gfx.matrix");
13
dojo.require("dijit.Tooltip");
14
dojo.require("dojox.lang.functional");
15
dojo.require("dojox.lang.functional.scan");
16
dojo.require("dojox.lang.functional.fold");
17
(function(){
18
var _1=function(o){
19
var t=o.run&&o.run.data&&o.run.data[o.index];
20
if(t&&typeof t!="number"&&(t.tooltip||t.text)){
21
return t.tooltip||t.text;
22
}
23
if(o.element=="candlestick"){
24
return "<table cellpadding=\"1\" cellspacing=\"0\" border=\"0\" style=\"font-size:0.9em;\">"+"<tr><td>Open:</td><td align=\"right\"><strong>"+o.data.open+"</strong></td></tr>"+"<tr><td>High:</td><td align=\"right\"><strong>"+o.data.high+"</strong></td></tr>"+"<tr><td>Low:</td><td align=\"right\"><strong>"+o.data.low+"</strong></td></tr>"+"<tr><td>Close:</td><td align=\"right\"><strong>"+o.data.close+"</strong></td></tr>"+(o.data.mid!==undefined?"<tr><td>Mid:</td><td align=\"right\"><strong>"+o.data.mid+"</strong></td></tr>":"")+"</table>";
25
}
26
return o.element=="bar"?o.x:o.y;
27
};
28
var df=dojox.lang.functional,m=dojox.gfx.matrix,_2=Math.PI/4,_3=Math.PI/2;
29
dojo.declare("dojox.charting.action2d.Tooltip",dojox.charting.action2d.Base,{defaultParams:{text:_1},optionalParams:{},constructor:function(_4,_5,_6){
30
this.text=_6&&_6.text?_6.text:_1;
31
this.connect();
32
},process:function(o){
33
if(o.type==="onplotreset"||o.type==="onmouseout"){
34
_7(this.aroundRect);
35
this.aroundRect=null;
36
return;
37
}
38
if(!o.shape||o.type!=="onmouseover"){
39
return;
40
}
41
var _8={type:"rect"},_9=["after","before"];
42
switch(o.element){
43
case "marker":
44
_8.x=o.cx;
45
_8.y=o.cy;
46
_8.width=_8.height=1;
47
break;
48
case "circle":
49
_8.x=o.cx-o.cr;
50
_8.y=o.cy-o.cr;
51
_8.width=_8.height=2*o.cr;
52
break;
53
case "column":
54
_9=["above","below"];
55
case "bar":
56
_8=dojo.clone(o.shape.getShape());
57
break;
58
case "candlestick":
59
_8.x=o.x;
60
_8.y=o.y;
61
_8.width=o.width;
62
_8.height=o.height;
63
break;
64
default:
65
if(!this.angles){
66
if(typeof o.run.data[0]=="number"){
67
this.angles=df.map(df.scanl(o.run.data,"+",0),"* 2 * Math.PI / this",df.foldl(o.run.data,"+",0));
68
}else{
69
this.angles=df.map(df.scanl(o.run.data,"a + b.y",0),"* 2 * Math.PI / this",df.foldl(o.run.data,"a + b.y",0));
70
}
71
}
72
var _a=m._degToRad(o.plot.opt.startAngle),_b=(this.angles[o.index]+this.angles[o.index+1])/2+_a;
73
_8.x=o.cx+o.cr*Math.cos(_b);
74
_8.y=o.cy+o.cr*Math.sin(_b);
75
_8.width=_8.height=1;
76
if(_b<_2){
77
}else{
78
if(_b<_3+_2){
79
_9=["below","above"];
80
}else{
81
if(_b<Math.PI+_2){
82
_9=["before","after"];
83
}else{
84
if(_b<2*Math.PI-_2){
85
_9=["above","below"];
86
}
87
}
88
}
89
}
90
break;
91
}
92
var lt=dojo.coords(this.chart.node,true);
93
_8.x+=lt.x;
94
_8.y+=lt.y;
95
_8.x=Math.round(_8.x);
96
_8.y=Math.round(_8.y);
97
_8.width=Math.ceil(_8.width);
98
_8.height=Math.ceil(_8.height);
99
this.aroundRect=_8;
100
_c(this.text(o),this.aroundRect,_9,"center");
101
}});
102
var _d=dojo.declare(dijit._MasterTooltip,{show:function(_e,_f,_10,_11){
103
if(this.aroundNode&&this.aroundNode===_f){
104
return;
105
}
106
if(this.fadeOut.status()=="playing"){
107
this._onDeck=arguments;
108
return;
109
}
110
this.containerNode.innerHTML=_e;
111
this.domNode.style.top=(this.domNode.offsetTop+1)+"px";
112
if(!this.connectorNode){
113
this.connectorNode=dojo.query(".dijitTooltipConnector",this.domNode)[0];
114
}
115
var _12=dojo.coords(this.connectorNode);
116
this.arrowWidth=_12.w,this.arrowHeight=_12.h;
117
this.place=(_11&&_11=="center")?this.placeChartingTooltip:dijit.placeOnScreenAroundElement,this.place(this.domNode,_f,dijit.getPopupAroundAlignment((_10&&_10.length)?_10:dijit.Tooltip.defaultPosition,this.isLeftToRight()),dojo.hitch(this,"orient"));
118
dojo.style(this.domNode,"opacity",0);
119
this.fadeIn.play();
120
this.isShowingNow=true;
121
this.aroundNode=_f;
122
},placeChartingTooltip:function(_13,_14,_15,_16){
123
return this._placeOnScreenAroundRect(_13,_14.x,_14.y,_14.width,_14.height,_15,_16);
124
},_placeOnScreenAroundRect:function(_17,x,y,_18,_19,_1a,_1b){
125
var _1c=[];
126
for(var _1d in _1a){
127
_1c.push({aroundCorner:_1d,corner:_1a[_1d],pos:{x:x+(_1d.charAt(1)=="L"?0:_18),y:y+(_1d.charAt(0)=="T"?0:_19),w:_18,h:_19}});
128
}
129
return this._place(_17,_1c,_1b);
130
},_place:function(_1e,_1f,_20){
131
var _21=dijit.getViewport();
132
if(!_1e.parentNode||String(_1e.parentNode.tagName).toLowerCase()!="body"){
133
dojo.body().appendChild(_1e);
134
}
135
var _22=null;
136
var _23=null,_24=null;
137
dojo.some(_1f,function(_25){
138
var _26=_25.corner;
139
var _27=_25.aroundCorner;
140
var pos=_25.pos;
141
if(_20){
142
_20(_1e,_25.aroundCorner,_26);
143
}
144
var _28=_1e.style;
145
var _29=_28.display;
146
var _2a=_28.visibility;
147
_28.visibility="hidden";
148
_28.display="";
149
var mb=dojo.marginBox(_1e);
150
_28.display=_29;
151
_28.visibility=_2a;
152
var _2b,_2c,_2d,_2e,_2f,_30,_31;
153
_23=null,_24=null;
154
if(_27.charAt(0)==_26.charAt(0)){
155
_2b=(_26.charAt(1)=="L"?pos.x:Math.max(_21.l,pos.x-mb.w)),_2c=(_26.charAt(0)=="T"?(pos.y+pos.h/2-mb.h/2):(pos.y-pos.h/2-mb.h/2)),_2d=(_26.charAt(1)=="L"?Math.min(_21.l+_21.w,_2b+mb.w):pos.x),_2e=_2c+mb.h,_2f=_2d-_2b,_30=_2e-_2c,_31=(mb.w-_2f)+(mb.h-_30);
156
_24=(mb.h-this.arrowHeight)/2;
157
}else{
158
_2b=(_26.charAt(1)=="L"?(pos.x+pos.w/2-mb.w/2):(pos.x-pos.w/2-mb.w/2)),_2c=(_26.charAt(0)=="T"?pos.y:Math.max(_21.t,pos.y-mb.h)),_2d=_2b+mb.w,_2e=(_26.charAt(0)=="T"?Math.min(_21.t+_21.h,_2c+mb.h):pos.y),_2f=_2d-_2b,_30=_2e-_2c,_31=(mb.w-_2f)+(mb.h-_30);
159
_23=(mb.w-this.arrowWidth)/2;
160
}
161
if(_22==null||_31<_22.overflow){
162
_22={corner:_26,aroundCorner:_25.aroundCorner,x:_2b,y:_2c,w:_2f,h:_30,overflow:_31};
163
}
164
return !_31;
165
},this);
166
_1e.style.left=_22.x+"px";
167
_1e.style.top=_22.y+"px";
168
this.connectorNode.style.top="";
169
this.connectorNode.style.left="";
170
if(_24){
171
this.connectorNode.style.top=_24+"px";
172
}
173
if(_23){
174
this.connectorNode.style.left=_23+"px";
175
}
176
if(_22.overflow&&_20){
177
_20(_1e,_22.aroundCorner,_22.corner);
178
}
179
return _22;
180
}});
181
var _32=null;
182
function _c(_33,_34,_35,_36){
183
if(!_32){
184
_32=new _d();
185
}
186
return _32.show(_33,_34,_35,_36);
187
};
188
function _7(_37){
189
if(!_32){
190
_32=new _d();
191
}
192
return _32.hide(_37);
193
};
194
})();
195
}