/* * Optimized version of PerspectiveTransform.js * by Edan Kwan * website: http://www.edankwan.com/ * twitter: https://twitter.com/#!/edankwan * Lab: www.edankwan.com/lab * * The original PerspectiveTransform.js is created by Israel Pastrana * http://www.is-real.net/experiments/css3/wonder-webkit/js/real/display/PerspectiveTransform.js * * Matrix Libraries from a Java port of JAMA: A Java Matrix Package, http://math.nist.gov/javanumerics/jama/ * Developed by Dr Peter Coxhead: http://www.cs.bham.ac.uk/~pxc/ * Available here: http://www.cs.bham.ac.uk/~pxc/js/ * * I simply removed some irrelevant variables and functions and merge everything into a smaller function. I also added some error checking functions and bug fixing things. */ "use strict";!function(t){t(function(){function t(t,i,o,e){this.element=t,this.style=t.style,this.computedStyle=window.getComputedStyle(t),this.width=i,this.height=o,this.useBackFacing=!!e,this.topLeft={x:0,y:0},this.topRight={x:i,y:0},this.bottomLeft={x:0,y:o},this.bottomRight={x:i,y:o},this.calcStyle=""}return t.useDPRFix=!1,t.dpr=1,t.prototype=function(){function i(){var t=this.topLeft.x-this.topRight.x,i=this.topLeft.y-this.topRight.y;return Math.sqrt(t*t+i*i)<=1||(t=this.bottomLeft.x-this.bottomRight.x,i=this.bottomLeft.y-this.bottomRight.y,Math.sqrt(t*t+i*i)<=1||(t=this.topLeft.x-this.bottomLeft.x,i=this.topLeft.y-this.bottomLeft.y,Math.sqrt(t*t+i*i)<=1||(t=this.topRight.x-this.bottomRight.x,i=this.topRight.y-this.bottomRight.y,Math.sqrt(t*t+i*i)<=1||(t=this.topLeft.x-this.bottomRight.x,i=this.topLeft.y-this.bottomRight.y,Math.sqrt(t*t+i*i)<=1||(t=this.topRight.x-this.bottomLeft.x,i=this.topRight.y-this.bottomLeft.y,Math.sqrt(t*t+i*i)<=1)))))}function o(t,i,o){return t.x*i.y+i.x*o.y+o.x*t.y-t.y*i.x-i.y*o.x-o.y*t.x}function e(){var t=o(this.topLeft,this.topRight,this.bottomRight),i=o(this.bottomRight,this.bottomLeft,this.topLeft);if(this.useBackFacing){if(t*i<=0)return!0}else if(t<=0||i<=0)return!0;var t=o(this.topRight,this.bottomRight,this.bottomLeft),i=o(this.bottomLeft,this.topLeft,this.topRight);if(this.useBackFacing){if(t*i<=0)return!0}else if(t<=0||i<=0)return!0;return!1}function r(){return i.apply(this)?1:e.apply(this)?2:0}function s(){var i=this.width,o=this.height,e=0,r=0,s=this.computedStyle.getPropertyValue(t.transformOriginDomStyleName);s.indexOf("px")>-1?(s=s.split("px"),e=-parseFloat(s[0]),r=-parseFloat(s[1])):s.indexOf("%")>-1&&(s=s.split("%"),e=-parseFloat(s[0])*i/100,r=-parseFloat(s[1])*o/100);for(var h=[this.topLeft,this.topRight,this.bottomLeft,this.bottomRight],f=[0,1,2,3,4,5,6,7],m=0;m<4;m++)n[m][0]=n[m+4][3]=1&m?i+e:e,n[m][1]=n[m+4][4]=m>1?o+r:r,n[m][6]=(1&m?-e-i:-e)*(h[m].x+e),n[m][7]=(m>1?-r-o:-r)*(h[m].x+e),n[m+4][6]=(1&m?-e-i:-e)*(h[m].y+r),n[m+4][7]=(m>1?-r-o:-r)*(h[m].y+r),a[m]=h[m].x+e,a[m+4]=h[m].y+r,n[m][2]=n[m+4][5]=1,n[m][3]=n[m][4]=n[m][5]=n[m+4][0]=n[m+4][1]=n[m+4][2]=0;for(var y,x,p,m,l,c,g,u=[],l=0;l<8;l++){for(var m=0;m<8;m++)u[m]=n[m][l];for(m=0;m<8;m++){p=n[m],y=mMath.abs(u[d])&&(d=m);if(d!=l){for(c=0;c<8;c++)g=n[d][c],n[d][c]=n[l][c],n[l][c]=g;g=f[d],f[d]=f[l],f[l]=g}if(0!=n[l][l])for(m=l+1;m<8;m++)n[m][l]/=n[l][l]}for(m=0;m<8;m++)f[m]=a[f[m]];for(c=0;c<8;c++)for(m=c+1;m<8;m++)f[m]-=f[c]*n[m][c];for(c=7;c>-1;c--)for(f[c]/=n[c][c],m=0;m0?"Transform":"transform"),t.transformDomStyleName="-"+f.stylePrefix.toLowerCase()+"-transform",t.transformOriginStyleName=f.stylePrefix+(f.stylePrefix.length>0?"TransformOrigin":"transformOrigin"),t.transformOriginDomStyleName="-"+f.stylePrefix.toLowerCase()+"-transform-origin"}(),f.calc=s,f.update=h,f.checkError=r,f}(),t})}("function"==typeof define&&define.amd?define:function(t){window.PerspectiveTransform=t()});