root / trunk / web / dojo / dojox / html / ext-dojo / style.js @ 10
History | View | Annotate | Download (8.31 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.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 | } |