Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Jun 27th, 2011  |  syntax: JavaScript  |  size: 4.07 KB  |  views: 59  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. /* jQuery rotate
  2.  * Copyright 2010 Thomas Preusse
  3.  * feel free to use under MIT or GPL licenses
  4.  * CSS support check by Wilq32 <http://wilq32.blogspot.com>
  5.  * IE support based on Jordan Andree <http://noblegiant.com/blog/>
  6.  */
  7. (function($) {
  8.  
  9.         var supportedCSS, styles=document.getElementsByTagName("head")[0].style,toCheck="transform MozTransform WebkitTransform OTransform".split(" ");
  10.         for (var a=0;a<toCheck.length;a++) if (styles[toCheck[a]] !== undefined) supportedCSS = toCheck[a];
  11.         var rMatrix = /Matrix\([^)]*\)/;
  12.  
  13. jQuery.fn.extend({
  14.         rotateSupportCSS:function(){
  15.                 if(supportedCSS) {
  16.                         return true;
  17.                 }
  18.                 else {
  19.                         return false;
  20.                 }
  21.         },
  22.         rotateSupport:undefined,
  23.         rotate:function(degree)
  24.         {
  25.                 if($.rotateSupport === undefined) {
  26.                         if(supportedCSS || this.get(0).filters) {
  27.                                 $.rotateSupport = true;
  28.                         }
  29.                         else {
  30.                                 $.rotateSupport = false;
  31.                         }
  32.                 }
  33.                 if($.rotateSupport === false || this.length===0) return;
  34.                
  35.                 var element, eXCenter, eYCenter, eX, eY, eWidth, eHeight, eData;
  36.                 if(!supportedCSS) {
  37.                         var rad, costheta, sintheta, deg2radians = Math.PI * 2 / 360;
  38.                 }
  39.                 for(var i=0; i < this.length; i++)
  40.                 {
  41.                         element = this.get(i);
  42.                         jElement = $(element);
  43.                     if(supportedCSS) {
  44.                                 jElement.css(supportedCSS, 'rotate('+degree+'deg)');
  45.                         }
  46.                         else {
  47.                                 if(element.tagName == 'IMG') {
  48.                                         var imgId = element.id+'', divWraper = document.createElement('div'), jDivWraper = $(divWraper), setSelectedObject;
  49.                                         if(selectedObject !== undefined && selectedObject.attr('id') == imgId) {
  50.                                                 selectedObject = false;
  51.                                                 setSelectedObject = true;
  52.                                         }
  53.                                         element.id = '';
  54.                                         divWraper.id = imgId;
  55.                                         divWraper.className = element.className;
  56.                                         jDivWraper.attr('style', jElement.attr('style'));
  57.                                         divWraper.width = element.width;
  58.                                         divWraper.height = element.height;
  59.                                         divWraper.innerHTML = '<img width="100%" height="100%" src="'+element.src+'" style="margin:0px; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\''+element.src+'\',sizingMethod=\'scale\');" alt="'+element.alt+'" />';
  60.                                         jElement.parent().append(divWraper);
  61.                                         jElement.remove();
  62.                                         element = divWraper;
  63.                                         jElement = jDivWraper;
  64.                                         if(setSelectedObject) selectedObject = jDivWraper;
  65.                                         else if (jResizeTool !== undefined && imgId == 'resizeTool') jResizeTool = jDivWraper;
  66.                                 }
  67.                                 var originalSize;
  68.                                 if(allMoveableObjects && (eData = allMoveableObjects[jElement.attr('id')])) {
  69.                                         eWidth = eData.originalWidth * eData.ratio;
  70.                                         eHeight = eData.originalHeight * eData.ratio;
  71.                                 }
  72.                                 else if(resizeToolSize && jElement.attr('id') == 'resizeTool') {
  73.                                         eWidth = resizeToolSize.w;
  74.                                         eHeight = resizeToolSize.h;
  75.                                 }
  76.                                 else {
  77.                                         originalSize = jElement.data('originalSize');
  78.                                         if(originalSize === null) {
  79.                                                 eWidth = jElement.width();
  80.                                                 eHeight = jElement.height();
  81.                                                 jElement.data('originalSize', {w:eWidth, h:eHeight});
  82.                                         }
  83.                                         else {
  84.                                                 eWidth = originalSize.w;
  85.                                                 eHeight = originalSize.h;
  86.                                         }
  87.                                 }
  88.                                
  89.                                 rad = degree * deg2radians;
  90.                                 costheta = Math.cos(rad);
  91.                                 sintheta = Math.sin(rad);
  92.                                 //progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+element.src+"',sizingMethod='scale')
  93.                                 //progid:DXImageTransform.Microsoft.Chroma(color='green')
  94.                                 var filter = element.style.filter, matrix = "Matrix(M11="+costheta+",M12="+(-sintheta)+",M21="+sintheta+",M22="+costheta+",sizingMethod='auto expand')";
  95.                                 element.style.filter = rMatrix.test(filter) ? filter.replace(rMatrix, matrix) : filter+' progid:DXImageTransform.Microsoft.'+matrix;
  96.                                
  97.                                 /*eX = (eData.x -(1/2)*(jElement.width()-eWidth));
  98.                                 eY = (eData.y -(1/2)*(jElement.height()-eHeight));
  99.                                 if(eData) {
  100.                                         eData.x = eX;
  101.                                         eData.y = eY;
  102.                                         //eData.ratio = jElement.width() / eData.originalWidth;
  103.                                 }
  104.                                 jElement.css('left', eX+'px');
  105.                                 jElement.css('top', eY+'px');*/
  106.                                 if(eWidth && eHeight) {
  107.                                         jElement.css('margin', (-(1/2)*(jElement.height()-eHeight))+'px 0px 0px '+ (-(1/2)*(jElement.width()-eWidth))+'px');
  108.                                 }
  109.                                
  110.                         }
  111.                 }
  112.                 return this;
  113.         }
  114.  
  115. });
  116.  
  117. })(jQuery);