root / trunk / web / dojo / dojox / html / ext-dojo / style.js
History | View | Annotate | Download (8.31 KB)
1 |
/*
|
---|---|
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.html.ext-dojo.style"]){ |
9 |
dojo._hasResource["dojox.html.ext-dojo.style"]=true; |
10 |
dojo.provide("dojox.html.ext-dojo.style");
|
11 |
dojo.experimental("dojox.html.ext-dojo.style");
|
12 |
dojo.mixin(dojox.html["ext-dojo"].style,{supportsTransform:true,_toPx:function(_1){ |
13 |
var ds=dojo.style,_2=this._conversion; |
14 |
if(typeof _1==="number"){ |
15 |
return _1+"px"; |
16 |
}else{
|
17 |
if(_1.toLowerCase().indexOf("px")!=-1){ |
18 |
return _1;
|
19 |
} |
20 |
} |
21 |
!_2.parentNode&&dojo.place(_2,dojo.body()); |
22 |
ds(_2,"margin",_1);
|
23 |
return ds(_2,"margin"); |
24 |
},init:function(){ |
25 |
var ds=dojo.style,_3=dojo.doc.documentElement.style,_4=dojox.html["ext-dojo"].style; |
26 |
dojo.style=function(_5,_6,_7){ |
27 |
var n=dojo.byId(_5),tr=(_6=="transform"),to=(_6=="transformOrigin"),_8=arguments.length; |
28 |
if(_8==3){ |
29 |
if(tr){
|
30 |
_4.setTransform(n,_7,true);
|
31 |
}else{
|
32 |
if(to){
|
33 |
_4.setTransformOrigin(n,_7); |
34 |
}else{
|
35 |
ds(_5,_6,_7); |
36 |
} |
37 |
} |
38 |
} |
39 |
if(_8==2){ |
40 |
if(tr){
|
41 |
return _4.getTransform(_5);
|
42 |
}else{
|
43 |
if(to){
|
44 |
return _4.getTransformOrigin(_5);
|
45 |
}else{
|
46 |
return ds(_5,_6);
|
47 |
} |
48 |
} |
49 |
} |
50 |
}; |
51 |
for(var i=0,_9=["WebkitT","MozT","OT","t"];i<_9.length;i++){ |
52 |
if(typeof _3[_9[i]+"ransform"]!=="undefined"){ |
53 |
this.tPropertyName=_9[i]+"ransform"; |
54 |
} |
55 |
if(typeof _3[_9[i]+"ransformOrigin"]!=="undefined"){ |
56 |
this.toPropertyName=_9[i]+"ransformOrigin"; |
57 |
} |
58 |
} |
59 |
if(this.tPropertyName){ |
60 |
this.setTransform=function(_a,_b){ |
61 |
return dojo.style(_a,this.tPropertyName,_b); |
62 |
}; |
63 |
this.getTransform=function(_c){ |
64 |
return dojo.style(_c,this.tPropertyName); |
65 |
}; |
66 |
}else{
|
67 |
if(dojo.isIE){
|
68 |
this.setTransform=this._setTransformFilter; |
69 |
this.getTransform=this._getTransformFilter; |
70 |
} |
71 |
} |
72 |
if(this.toPropertyName){ |
73 |
this.setTransformOrigin=function(_d,_e){ |
74 |
return dojo.style(_d,this.toPropertyName,_e); |
75 |
}; |
76 |
this.getTransformOrigin=function(_f){ |
77 |
return dojo.style(_f,this.toPropertyName); |
78 |
}; |
79 |
}else{
|
80 |
if(dojo.isIE){
|
81 |
this.setTransformOrigin=this._setTransformOriginFilter; |
82 |
this.getTransformOrigin=this._getTransformOriginFilter; |
83 |
}else{
|
84 |
this.supportsTransform=false; |
85 |
} |
86 |
} |
87 |
this._conversion=dojo.create("div",{style:{position:"absolute",top:"-100px",left:"-100px",fontSize:0,width:"0",backgroundPosition:"50% 50%"}}); |
88 |
},_notSupported:function(){ |
89 |
console.warn("Sorry, this browser doesn't support transform and transform-origin");
|
90 |
},_setTransformOriginFilter:function(_10,_11){ |
91 |
var to=dojo.trim(_11).replace(" top"," 0").replace("left ","0 ").replace(" center","50%").replace("center ","50% ").replace(" bottom"," 100%").replace("right ","100% ").replace(/\s+/," "),_12=to.split(" "),n=dojo.byId(_10),t=this.getTransform(n),_13=true; |
92 |
for(var i=0;i<_12.length;i++){ |
93 |
_13=_13&&/^0|(\d+(%|px|pt|in|pc|mm|cm))$/.test(_12[i]);
|
94 |
if(_12[i].indexOf("%")==-1){ |
95 |
_12[i]=this._toPx(_12[i]);
|
96 |
} |
97 |
} |
98 |
if(!_13){
|
99 |
return;
|
100 |
} |
101 |
if(!_12.length||_12.length>2){ |
102 |
return;
|
103 |
} |
104 |
dojo.attr(n,"dojo-transform-origin",_12.join(" ")); |
105 |
t&&this.setTransform(_10,t);
|
106 |
},_getTransformOriginFilter:function(_14){ |
107 |
return dojo.attr(_14,"dojo-transform-origin")||"50% 50%"; |
108 |
},_setTransformFilter:function(_15,_16){ |
109 |
var t=_16.replace(/\s/g,""),n=dojo.byId(_15),_17=t.split(")"),_18=1,_19=1,_1a="DXImageTransform.Microsoft.Matrix",_1b=dojo.hasAttr,_1c=dojo.attr,PI=Math.PI,cos=Math.cos,sin=Math.sin,tan=Math.tan,max=Math.max,min=Math.min,abs=Math.abs,_1d=PI/180,_1e=PI/200,ct="",_1f="",_20=[],x0=0,y0=0,dx=0,dy=0,xc=0,yc=0,a=0,m11=1,m12=0,m21=0,m22=1,tx=0,ty=0,_21=[m11,m12,m21,m22,tx,ty],_22=false,ds=dojo.style,_23=ds(n,"position")=="absolute"?"absolute":"relative",w=ds(n,"width")+ds(n,"paddingLeft")+ds(n,"paddingRight"),h=ds(n,"height")+ds(n,"paddingTop")+ds(n,"paddingBottom"),_24=this._toPx; |
110 |
!_1b(n,"dojo-transform-origin")&&this.setTransformOrigin(n,"50% 50%"); |
111 |
for(var i=0,l=_17.length;i<l;i++){ |
112 |
_20=_17[i].match(/matrix|rotate|scaleX|scaleY|scale|skewX|skewY|skew|translateX|translateY|translate/);
|
113 |
_1f=_20?_20[0]:""; |
114 |
switch(_1f){
|
115 |
case "matrix": |
116 |
ct=_17[i].replace(/matrix\(|\)/g,""); |
117 |
var _25=ct.split(","); |
118 |
m11=_21[0]*_25[0]+_21[1]*_25[2]; |
119 |
m12=_21[0]*_25[1]+_21[1]*_25[3]; |
120 |
m21=_21[2]*_25[0]+_21[3]*_25[2]; |
121 |
m22=_21[2]*_25[1]+_21[3]*_25[3]; |
122 |
tx=_21[4]+_25[4]; |
123 |
ty=_21[5]+_25[5]; |
124 |
break;
|
125 |
case "rotate": |
126 |
ct=_17[i].replace(/rotate\(|\)/g,""); |
127 |
_18=ct.indexOf("deg")!=-1?_1d:ct.indexOf("grad")!=-1?_1e:1; |
128 |
a=parseFloat(ct)*_18; |
129 |
var s=sin(a),c=cos(a);
|
130 |
m11=_21[0]*c+_21[1]*s; |
131 |
m12=-_21[0]*s+_21[1]*c; |
132 |
m21=_21[2]*c+_21[3]*s; |
133 |
m22=-_21[2]*s+_21[3]*c; |
134 |
break;
|
135 |
case "skewX": |
136 |
ct=_17[i].replace(/skewX\(|\)/g,""); |
137 |
_18=ct.indexOf("deg")!=-1?_1d:ct.indexOf("grad")!=-1?_1e:1; |
138 |
var ta=tan(parseFloat(ct)*_18);
|
139 |
m11=_21[0];
|
140 |
m12=_21[0]*ta+_21[1]; |
141 |
m21=_21[2];
|
142 |
m22=_21[2]*ta+_21[3]; |
143 |
break;
|
144 |
case "skewY": |
145 |
ct=_17[i].replace(/skewY\(|\)/g,""); |
146 |
_18=ct.indexOf("deg")!=-1?_1d:ct.indexOf("grad")!=-1?_1e:1; |
147 |
ta=tan(parseFloat(ct)*_18); |
148 |
m11=_21[0]+_21[1]*ta; |
149 |
m12=_21[1];
|
150 |
m21=_21[2]+_21[3]*ta; |
151 |
m22=_21[3];
|
152 |
break;
|
153 |
case "skew": |
154 |
ct=_17[i].replace(/skew\(|\)/g,""); |
155 |
var _26=ct.split(","); |
156 |
_26[1]=_26[1]||"0"; |
157 |
_18=_26[0].indexOf("deg")!=-1?_1d:_26[0].indexOf("grad")!=-1?_1e:1; |
158 |
_19=_26[1].indexOf("deg")!=-1?_1d:_26[1].indexOf("grad")!=-1?_1e:1; |
159 |
var a0=tan(parseFloat(_26[0])*_18),a1=tan(parseFloat(_26[1])*_19); |
160 |
m11=_21[0]+_21[1]*a1; |
161 |
m12=_21[0]*a0+_21[1]; |
162 |
m21=_21[2]+_21[3]*a1; |
163 |
m22=_21[2]*a0+_21[3]; |
164 |
break;
|
165 |
case "scaleX": |
166 |
ct=parseFloat(_17[i].replace(/scaleX\(|\)/g,""))||1; |
167 |
m11=_21[0]*ct;
|
168 |
m12=_21[1];
|
169 |
m21=_21[2]*ct;
|
170 |
m22=_21[3];
|
171 |
break;
|
172 |
case "scaleY": |
173 |
ct=parseFloat(_17[i].replace(/scaleY\(|\)/g,""))||1; |
174 |
m11=_21[0];
|
175 |
m12=_21[1]*ct;
|
176 |
m21=_21[2];
|
177 |
m22=_21[3]*ct;
|
178 |
break;
|
179 |
case "scale": |
180 |
ct=_17[i].replace(/scale\(|\)/g,""); |
181 |
var _27=ct.split(","); |
182 |
_27[1]=_27[1]||_27[0]; |
183 |
m11=_21[0]*_27[0]; |
184 |
m12=_21[1]*_27[1]; |
185 |
m21=_21[2]*_27[0]; |
186 |
m22=_21[3]*_27[1]; |
187 |
break;
|
188 |
case "translateX": |
189 |
ct=parseInt(_17[i].replace(/translateX\(|\)/g,""))||1; |
190 |
m11=_21[0];
|
191 |
m12=_21[1];
|
192 |
m21=_21[2];
|
193 |
m22=_21[3];
|
194 |
tx=_24(ct); |
195 |
tx&&_1c(n,"dojo-transform-matrix-tx",tx);
|
196 |
break;
|
197 |
case "translateY": |
198 |
ct=parseInt(_17[i].replace(/translateY\(|\)/g,""))||1; |
199 |
m11=_21[0];
|
200 |
m12=_21[1];
|
201 |
m21=_21[2];
|
202 |
m22=_21[3];
|
203 |
ty=_24(ct); |
204 |
ty&&_1c(n,"dojo-transform-matrix-ty",ty);
|
205 |
break;
|
206 |
case "translate": |
207 |
ct=_17[i].replace(/translate\(|\)/g,""); |
208 |
m11=_21[0];
|
209 |
m12=_21[1];
|
210 |
m21=_21[2];
|
211 |
m22=_21[3];
|
212 |
var _28=ct.split(","); |
213 |
_28[0]=parseInt(_24(_28[0]))||0; |
214 |
_28[1]=parseInt(_24(_28[1]))||0; |
215 |
tx=_28[0];
|
216 |
ty=_28[1];
|
217 |
tx&&_1c(n,"dojo-transform-matrix-tx",tx);
|
218 |
ty&&_1c(n,"dojo-transform-matrix-ty",ty);
|
219 |
break;
|
220 |
} |
221 |
_21=[m11,m12,m21,m22,tx,ty]; |
222 |
} |
223 |
var Bx=min(w*m11+h*m12,min(min(w*m11,h*m12),0)),By=min(w*m21+h*m22,min(min(w*m21,h*m22),0)); |
224 |
dx=-Bx; |
225 |
dy=-By; |
226 |
if(dojo.isIE<8){ |
227 |
n.style.zoom="1";
|
228 |
if(_23!="absolute"){ |
229 |
var _29=ds(_15.parentNode,"width"),tw=abs(w*m11),th=abs(h*m12),_2a=max(tw+th,max(max(th,tw),0)); |
230 |
dx-=(_2a-w)/2-(_29>_2a?0:(_2a-_29)/2); |
231 |
} |
232 |
}else{
|
233 |
if(dojo.isIE==8){ |
234 |
ds(n,"zIndex")=="auto"&&(n.style.zIndex="0"); |
235 |
} |
236 |
} |
237 |
try{
|
238 |
_22=!!n.filters.item(_1a); |
239 |
} |
240 |
catch(e){
|
241 |
_22=false;
|
242 |
} |
243 |
if(_22){
|
244 |
n.filters.item(_1a).M11=m11; |
245 |
n.filters.item(_1a).M12=m12; |
246 |
n.filters.item(_1a).M21=m21; |
247 |
n.filters.item(_1a).M22=m22; |
248 |
n.filters.item(_1a).filterType="bilinear";
|
249 |
n.filters.item(_1a).Dx=0;
|
250 |
n.filters.item(_1a).Dy=0;
|
251 |
n.filters.item(_1a).sizingMethod="auto expand";
|
252 |
}else{
|
253 |
n.style.filter+=" progid:"+_1a+"(M11="+m11+",M12="+m12+",M21="+m21+",M22="+m22+",FilterType='bilinear',Dx=0,Dy=0,sizingMethod='auto expand')"; |
254 |
} |
255 |
tx=parseInt(_1c(n,"dojo-transform-matrix-tx")||"0"); |
256 |
ty=parseInt(_1c(n,"dojo-transform-matrix-ty")||"0"); |
257 |
var _2b=_1c(n,"dojo-transform-origin").split(" "); |
258 |
for(i=0;i<2;i++){ |
259 |
_2b[i]=_2b[i]||"50%";
|
260 |
} |
261 |
xc=(_2b[0].toString().indexOf("%")!=-1)?w*parseInt(_2b[0])*0.01:_2b[0]; |
262 |
yc=(_2b[1].toString().indexOf("%")!=-1)?h*parseInt(_2b[1])*0.01:_2b[1]; |
263 |
if(_1b(n,"dojo-startX")){ |
264 |
x0=parseInt(_1c(n,"dojo-startX"));
|
265 |
}else{
|
266 |
x0=parseInt(ds(n,"left"));
|
267 |
_1c(n,"dojo-startX",_23=="absolute"?x0:"0"); |
268 |
} |
269 |
if(_1b(n,"dojo-startY")){ |
270 |
y0=parseInt(_1c(n,"dojo-startY"));
|
271 |
}else{
|
272 |
y0=parseInt(ds(n,"top"));
|
273 |
_1c(n,"dojo-startY",_23=="absolute"?y0:"0"); |
274 |
} |
275 |
ds(n,{position:_23,left:x0-parseInt(dx)+parseInt(xc)-((parseInt(xc)-tx)*m11+(parseInt(yc)-ty)*m12)+"px",top:y0-parseInt(dy)+parseInt(yc)-((parseInt(xc)-tx)*m21+(parseInt(yc)-ty)*m22)+"px"}); |
276 |
},_getTransformFilter:function(_2c){ |
277 |
try{
|
278 |
var n=dojo.byId(_2c),_2d=n.filters.item(0); |
279 |
return "matrix("+_2d.M11+", "+_2d.M12+", "+_2d.M21+", "+_2d.M22+", "+(dojo.attr(_2c,"dojo-transform-tx")||"0")+", "+(dojo.attr(_2c,"dojo-transform-ty")||"0")+")"; |
280 |
} |
281 |
catch(e){
|
282 |
return "matrix(1, 0, 0, 1, 0, 0)"; |
283 |
} |
284 |
},setTransform:function(){ |
285 |
this._notSupported();
|
286 |
},setTransformOrigin:function(){ |
287 |
this._notSupported();
|
288 |
}}); |
289 |
dojox.html["ext-dojo"].style.init();
|
290 |
} |