/* jQuery rotate
* Copyright 2010 Thomas Preusse
* feel free to use under MIT or GPL licenses
* CSS support check by Wilq32 <http://wilq32.blogspot.com>
* IE support based on Jordan Andree <http://noblegiant.com/blog/>
*/
(function($) {
var supportedCSS, styles=document.getElementsByTagName("head")[0].style,toCheck="transform MozTransform WebkitTransform OTransform".split(" ");
for (var a=0;a<toCheck.length;a++) if (styles[toCheck[a]] !== undefined) supportedCSS = toCheck[a];
var rMatrix = /Matrix\([^)]*\)/;
jQuery.fn.extend({
rotateSupportCSS:function(){
if(supportedCSS) {
return true;
}
else {
return false;
}
},
rotateSupport:undefined,
rotate:function(degree)
{
if($.rotateSupport === undefined) {
if(supportedCSS || this.get(0).filters) {
$.rotateSupport = true;
}
else {
$.rotateSupport = false;
}
}
if($.rotateSupport === false || this.length===0) return;
var element, eXCenter, eYCenter, eX, eY, eWidth, eHeight, eData;
if(!supportedCSS) {
var rad, costheta, sintheta, deg2radians = Math.PI * 2 / 360;
}
for(var i=0; i < this.length; i++)
{
element = this.get(i);
jElement = $(element);
if(supportedCSS) {
jElement.css(supportedCSS, 'rotate('+degree+'deg)');
}
else {
if(element.tagName == 'IMG') {
var imgId = element.id+'', divWraper = document.createElement('div'), jDivWraper = $(divWraper), setSelectedObject;
if(selectedObject !== undefined && selectedObject.attr('id') == imgId) {
selectedObject = false;
setSelectedObject = true;
}
element.id = '';
divWraper.id = imgId;
divWraper.className = element.className;
jDivWraper.attr('style', jElement.attr('style'));
divWraper.width = element.width;
divWraper.height = element.height;
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+'" />';
jElement.parent().append(divWraper);
jElement.remove();
element = divWraper;
jElement = jDivWraper;
if(setSelectedObject) selectedObject = jDivWraper;
else if (jResizeTool !== undefined && imgId == 'resizeTool') jResizeTool = jDivWraper;
}
var originalSize;
if(allMoveableObjects && (eData = allMoveableObjects[jElement.attr('id')])) {
eWidth = eData.originalWidth * eData.ratio;
eHeight = eData.originalHeight * eData.ratio;
}
else if(resizeToolSize && jElement.attr('id') == 'resizeTool') {
eWidth = resizeToolSize.w;
eHeight = resizeToolSize.h;
}
else {
originalSize = jElement.data('originalSize');
if(originalSize === null) {
eWidth = jElement.width();
eHeight = jElement.height();
jElement.data('originalSize', {w:eWidth, h:eHeight});
}
else {
eWidth = originalSize.w;
eHeight = originalSize.h;
}
}
rad = degree * deg2radians;
costheta = Math.cos(rad);
sintheta = Math.sin(rad);
//progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+element.src+"',sizingMethod='scale')
//progid:DXImageTransform.Microsoft.Chroma(color='green')
var filter = element.style.filter, matrix = "Matrix(M11="+costheta+",M12="+(-sintheta)+",M21="+sintheta+",M22="+costheta+",sizingMethod='auto expand')";
element.style.filter = rMatrix.test(filter) ? filter.replace(rMatrix, matrix) : filter+' progid:DXImageTransform.Microsoft.'+matrix;
/*eX = (eData.x -(1/2)*(jElement.width()-eWidth));
eY = (eData.y -(1/2)*(jElement.height()-eHeight));
if(eData) {
eData.x = eX;
eData.y = eY;
//eData.ratio = jElement.width() / eData.originalWidth;
}
jElement.css('left', eX+'px');
jElement.css('top', eY+'px');*/
if(eWidth && eHeight) {
jElement.css('margin', (-(1/2)*(jElement.height()-eHeight))+'px 0px 0px '+ (-(1/2)*(jElement.width()-eWidth))+'px');
}
}
}
return this;
}
});
})(jQuery);