874 lines
19 KiB
JavaScript
874 lines
19 KiB
JavaScript
|
/*
|
||
|
* author: Logan Cai
|
||
|
* Email: cailongqun [at] yahoo [dot] com [dot] cn
|
||
|
* Website: www.phpletter.com
|
||
|
* Created At: 21/April/2007
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* get current selected mode value
|
||
|
*/
|
||
|
function getModeValue()
|
||
|
{
|
||
|
//check if an mode has been selected or selected first one be default
|
||
|
var CheckedElem = null;
|
||
|
for(var i = 0; i < document.formAction.mode.length; i++)
|
||
|
{
|
||
|
if(document.formAction.mode[i].checked || i == 0)
|
||
|
{
|
||
|
CheckedElem = document.formAction.mode[i];
|
||
|
}
|
||
|
}
|
||
|
CheckedElem.checked = true;
|
||
|
return CheckedElem.value;
|
||
|
};
|
||
|
/**
|
||
|
* get fired when mode changed
|
||
|
* fire according function
|
||
|
*/
|
||
|
function changeMode(restore, force)
|
||
|
{
|
||
|
|
||
|
var mode = getModeValue();
|
||
|
var imageMode = $('#image_mode');
|
||
|
if(mode != $(imageMode).val() || (typeof(restore) == "boolean"))
|
||
|
{
|
||
|
/**
|
||
|
* confirm it when there has been some changes before go further
|
||
|
*/
|
||
|
if(isImageHistoryExist() || typeof(force) == 'boolean')
|
||
|
{
|
||
|
if(typeof(restore) == "boolean" || typeof(force) == 'boolean' )
|
||
|
{
|
||
|
if(!restoreToOriginal(restore))
|
||
|
{
|
||
|
return false;
|
||
|
|
||
|
}
|
||
|
clearImageHistory();
|
||
|
}
|
||
|
else if(!window.confirm(warningLostChanges))
|
||
|
{
|
||
|
cancelChangeMode();
|
||
|
return false;
|
||
|
}else
|
||
|
{
|
||
|
restoreToOriginal(false);
|
||
|
clearImageHistory();
|
||
|
}
|
||
|
}else if((typeof(restore) == "boolean" && restore))
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
initPositionHandler();
|
||
|
switch(mode)
|
||
|
{
|
||
|
case "resize":
|
||
|
switch($('#image_mode').val())
|
||
|
{
|
||
|
case "crop":
|
||
|
disableCrop();
|
||
|
break;
|
||
|
case "rotate":
|
||
|
disableRotate();
|
||
|
break;
|
||
|
case "flip":
|
||
|
disableFlip();
|
||
|
break;
|
||
|
default:
|
||
|
disableRotate();
|
||
|
}
|
||
|
enableResize(document.formAction.constraint.checked);
|
||
|
break;
|
||
|
case "crop":
|
||
|
switch($('#image_mode').val())
|
||
|
{
|
||
|
case "resize":
|
||
|
disableResize();
|
||
|
break;
|
||
|
case "rotate":
|
||
|
disableRotate();
|
||
|
break;
|
||
|
case "flip":
|
||
|
disableFlip();
|
||
|
break;
|
||
|
default:
|
||
|
disableRotate();
|
||
|
}
|
||
|
enableCrop();
|
||
|
|
||
|
break;
|
||
|
case "rotate":
|
||
|
switch($('#image_mode').val())
|
||
|
{
|
||
|
case "resize":
|
||
|
disableResize();
|
||
|
break;
|
||
|
case "crop":
|
||
|
disableCrop();
|
||
|
break;
|
||
|
case "flip":
|
||
|
disableFlip();
|
||
|
break;
|
||
|
default:
|
||
|
//do nothing
|
||
|
}
|
||
|
enableRotate();
|
||
|
break;
|
||
|
case "flip":
|
||
|
switch($('#image_mode').val())
|
||
|
{
|
||
|
case "resize":
|
||
|
disableResize();
|
||
|
break;
|
||
|
case "crop":
|
||
|
disableCrop();
|
||
|
break;
|
||
|
case "rotate":
|
||
|
disableRotate();
|
||
|
break;
|
||
|
default:
|
||
|
//do nothing
|
||
|
}
|
||
|
enableFlip();
|
||
|
break;
|
||
|
default:
|
||
|
alert('Unexpected Operation!');
|
||
|
return false;
|
||
|
}
|
||
|
$('#image_mode').val(mode);
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
function resetEditor()
|
||
|
{
|
||
|
if(isImageHistoryExist())
|
||
|
{
|
||
|
changeMode(true);
|
||
|
}else
|
||
|
{
|
||
|
alert(warningResetEmpty);
|
||
|
}
|
||
|
return false;
|
||
|
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* enable to crop function
|
||
|
*/
|
||
|
function enableCrop()
|
||
|
{
|
||
|
var widthField = $('#width');
|
||
|
var heightField = $('#height');
|
||
|
var topField = $('#y');
|
||
|
var leftField = $('#x');
|
||
|
var imageToResize = getImageElement();
|
||
|
var imageWidth = $(imageToResize).attr('width');
|
||
|
var imageHeight = $(imageToResize).attr('height');
|
||
|
|
||
|
var overlay = $('#resizeMe');
|
||
|
var imageContainer = $('#imageContainer');
|
||
|
var imageContainerTop = parseInt($(imageContainer).css('top').replace('px', ''));
|
||
|
var imageContainerLeft = parseInt($(imageContainer).css('left').replace('px', ''));
|
||
|
//Init Container
|
||
|
$(imageContainer).css('width', imageWidth + 'px');
|
||
|
$(imageContainer).css('height', imageHeight + 'px');
|
||
|
$(imageToResize).css('opacity', '.5');
|
||
|
|
||
|
//Init Overlay
|
||
|
overlay.css('background-image', 'url('+ $(imageToResize).attr('src')+')');
|
||
|
overlay.css('width', imageWidth + 'px');
|
||
|
overlay.css('height', imageHeight + 'px');
|
||
|
|
||
|
//Init Form
|
||
|
widthField.val(imageWidth);
|
||
|
heightField.val(imageHeight);
|
||
|
topField.val(0);
|
||
|
leftField.val(0);
|
||
|
$(overlay).Resizable(
|
||
|
{
|
||
|
minWidth: 10,
|
||
|
minHeight: 10,
|
||
|
maxWidth: imageWidth,
|
||
|
maxHeight: imageHeight,
|
||
|
minTop: imageContainerTop,
|
||
|
minLeft: imageContainerLeft,
|
||
|
maxRight: (parseInt(imageWidth) + imageContainerLeft),
|
||
|
maxBottom: (parseInt(imageHeight) + imageContainerTop),
|
||
|
dragHandle: true,
|
||
|
onDrag: function(x, y)
|
||
|
{
|
||
|
this.style.backgroundPosition = '-' + (x - imageContainerLeft) + 'px -' + (y - imageContainerTop) + 'px';
|
||
|
$(topField).val(Math.round(y - imageContainerTop));
|
||
|
$(leftField).val(Math.round(x - imageContainerLeft));
|
||
|
addImageHistory();
|
||
|
},
|
||
|
handlers: {
|
||
|
se: '#resizeSE',
|
||
|
e: '#resizeE',
|
||
|
ne: '#resizeNE',
|
||
|
n: '#resizeN',
|
||
|
nw: '#resizeNW',
|
||
|
w: '#resizeW',
|
||
|
sw: '#resizeSW',
|
||
|
s: '#resizeS'
|
||
|
},
|
||
|
onResize : function(size, position) {
|
||
|
this.style.backgroundPosition = '-' + (position.left - imageContainerLeft) + 'px -' + (position.top - imageContainerTop) + 'px';
|
||
|
$(widthField).val(Math.round(size.width));
|
||
|
$(heightField).val(Math.round(size.height));
|
||
|
$(topField).val(Math.round(position.top - imageContainerTop));
|
||
|
$(leftField).val(Math.round(position.left - imageContainerLeft));
|
||
|
addImageHistory();
|
||
|
$('#ratio').val($(overlay).ResizableRatio() );
|
||
|
}
|
||
|
}
|
||
|
);
|
||
|
enableConstraint();
|
||
|
toggleConstraint();
|
||
|
disableRotate();
|
||
|
|
||
|
};
|
||
|
/*
|
||
|
* disable crop function
|
||
|
*/
|
||
|
function disableCrop()
|
||
|
{
|
||
|
$('#resizeMe').ResizableDestroy();
|
||
|
hideHandlers();
|
||
|
};
|
||
|
/**
|
||
|
* disable resize function
|
||
|
*/
|
||
|
function disableResize()
|
||
|
{
|
||
|
$('#resizeMe').ResizableDestroy();
|
||
|
|
||
|
hideHandlers();
|
||
|
};
|
||
|
/**
|
||
|
* hide all handlers
|
||
|
*/
|
||
|
function hideHandlers()
|
||
|
{
|
||
|
$('#resizeSE').hide();
|
||
|
$('#resizeE').hide();
|
||
|
$('#resizeNE').hide();
|
||
|
$('#resizeN').hide();
|
||
|
$('#resizeNW').hide();
|
||
|
$('#resizeW').hide();
|
||
|
$('#resizeSW').hide();
|
||
|
$('#resizeS').hide();
|
||
|
};
|
||
|
/**
|
||
|
*
|
||
|
* enable to resize the image
|
||
|
*/
|
||
|
function enableResize(constraint)
|
||
|
{
|
||
|
hideHandlers();
|
||
|
var imageToResize = getImageElement();
|
||
|
var imageContainer = $('#imageContainer');
|
||
|
var imageContainerTop = parseInt($(imageContainer).css('top').replace('px', ''));
|
||
|
var imageContainerLeft = parseInt($(imageContainer).css('left').replace('px', ''));
|
||
|
var resizeMe = $('#resizeMe');
|
||
|
var width = $('#width');
|
||
|
var height = $('#height');
|
||
|
//ensure the container has same size with the image
|
||
|
$(imageContainer).css('width', $(imageToResize).attr('width') + 'px');
|
||
|
$(imageContainer).css('height', $(imageToResize).attr('height') + 'px');
|
||
|
$(resizeMe).css('width', $(imageToResize).attr('width') + 'px');
|
||
|
$(resizeMe).css('height', $(imageToResize).attr('height') + 'px');
|
||
|
$('#width').val($(imageToResize).attr('width'));
|
||
|
$('#height').val($(imageToResize).attr('height'));
|
||
|
$('#x').val(0);
|
||
|
$('#y').val(0);
|
||
|
$(resizeMe).Resizable(
|
||
|
{
|
||
|
minWidth: 10,
|
||
|
minHeight: 10,
|
||
|
maxWidth: 2000,
|
||
|
maxHeight: 2000,
|
||
|
minTop: imageContainerTop,
|
||
|
minLeft: imageContainerLeft,
|
||
|
maxRight: 2000,
|
||
|
maxBottom: 2000,
|
||
|
handlers: {
|
||
|
s: '#resizeS',
|
||
|
se: '#resizeSE',
|
||
|
e: '#resizeE'
|
||
|
},
|
||
|
onResize: function(size)
|
||
|
{
|
||
|
$(imageToResize).attr('height', Math.round(size.height).toString());
|
||
|
$(imageToResize).attr('width', Math.round(size.width).toString());
|
||
|
$(width).val(Math.round(size.width));
|
||
|
$(height).val(Math.round(size.height));
|
||
|
$(imageContainer).css('width', $(imageToResize).attr('width') + 'px');
|
||
|
$(imageContainer).css('height', $(imageToResize).attr('height') + 'px');
|
||
|
$('#ratio').val($(resizeMe).ResizableRatio() );
|
||
|
addImageHistory();
|
||
|
}
|
||
|
|
||
|
}
|
||
|
);
|
||
|
$(resizeMe).ResizeConstraint(constraint);
|
||
|
if(typeof(constraint) == 'boolean' && constraint)
|
||
|
{
|
||
|
$('#resizeS').hide();
|
||
|
$('#resizeE').hide();
|
||
|
}else
|
||
|
{
|
||
|
$('#resizeS').show();
|
||
|
$('#resizeE').show();
|
||
|
}
|
||
|
$('#resizeSE').show();
|
||
|
$('#ratio').val($(resizeMe).ResizableRatio() );
|
||
|
|
||
|
|
||
|
};
|
||
|
/**
|
||
|
* initiate the position of handler
|
||
|
*/
|
||
|
function initPositionHandler()
|
||
|
{
|
||
|
var widthField = $('#width');
|
||
|
var heightField = $('#height');
|
||
|
var topField = $('#x');
|
||
|
var leftField = $('#y');
|
||
|
|
||
|
var imageToResize = getImageElement();
|
||
|
var imageWidth = $(imageToResize).attr('width');
|
||
|
var imageHeight = $(imageToResize).attr('height');
|
||
|
|
||
|
var overlay = $('#resizeMe');
|
||
|
var imageContainer = $('#imageContainer');
|
||
|
var imageContainerTop = parseInt($(imageContainer).css('top').replace('px', ''));
|
||
|
var imageContainerLeft = parseInt($(imageContainer).css('left').replace('px', ''));
|
||
|
//Init Container
|
||
|
$(imageContainer).css('width', imageWidth + 'px');
|
||
|
$(imageContainer).css('height', imageHeight + 'px');
|
||
|
|
||
|
//Init Overlay
|
||
|
$(imageToResize).css('opacity', '100');
|
||
|
$(overlay).css('width', imageWidth + 'px');
|
||
|
$(overlay).css('height', imageHeight + 'px');
|
||
|
$(overlay).css('background-image', '');
|
||
|
$(overlay).css('backgroundPosition', '0 0');
|
||
|
$(overlay).css('left', imageContainerLeft);
|
||
|
$(overlay).css('top', imageContainerTop);
|
||
|
|
||
|
//Init Form
|
||
|
$(widthField).val(imageWidth);
|
||
|
$(heightField).val(imageHeight);
|
||
|
$(topField).val(0);
|
||
|
$(leftField).val(0);
|
||
|
$('#angle').val(0);
|
||
|
$('#flip_angle').val('');
|
||
|
};
|
||
|
/**
|
||
|
* enable rotate function
|
||
|
*/
|
||
|
function enableRotate()
|
||
|
{
|
||
|
hideHandlers();
|
||
|
toggleDisabledButton('actionRotateLeft', false);
|
||
|
toggleDisabledButton('actionRotateRight', false);
|
||
|
|
||
|
};
|
||
|
/**
|
||
|
* disable rotation function
|
||
|
*/
|
||
|
function disableRotate()
|
||
|
{
|
||
|
toggleDisabledButton('actionRotateLeft', true);
|
||
|
toggleDisabledButton('actionRotateRight', true);
|
||
|
};
|
||
|
|
||
|
function enableConstraint()
|
||
|
{
|
||
|
$('#constraint').removeAttr('disabled');
|
||
|
};
|
||
|
|
||
|
function disableConstraint()
|
||
|
{
|
||
|
$('#constraint').attr('disabled', 'disabled');
|
||
|
};
|
||
|
function ShowHandlers()
|
||
|
{
|
||
|
$('#resizeSE').show();
|
||
|
$('#resizeE').show();
|
||
|
$('#resizeNE').show();
|
||
|
$('#resizeN').show();
|
||
|
$('#resizeNW').show();
|
||
|
$('#resizeW').show();
|
||
|
$('#resizeSW').show();
|
||
|
$('#resizeS').show();
|
||
|
} ;
|
||
|
|
||
|
/**
|
||
|
* turn constraint on or off
|
||
|
*/
|
||
|
function toggleConstraint()
|
||
|
{
|
||
|
hideHandlers();
|
||
|
if(document.formAction.constraint.checked)
|
||
|
{
|
||
|
$('#resizeMe').ResizeConstraint(true);
|
||
|
switch(getModeValue())
|
||
|
{
|
||
|
case "resize":
|
||
|
$('#resizeSE').show();
|
||
|
break;
|
||
|
case "crop":
|
||
|
$('#resizeSE').show();
|
||
|
$('#resizeNE').show();
|
||
|
$('#resizeNW').show();
|
||
|
$('#resizeSW').show();
|
||
|
|
||
|
break;
|
||
|
case "rotate":
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
}else
|
||
|
{
|
||
|
$('#resizeMe').ResizeConstraint(false);
|
||
|
switch(getModeValue())
|
||
|
{
|
||
|
case "resize":
|
||
|
$('#resizeSE').show();
|
||
|
$('#resizeE').show();
|
||
|
$('#resizeS').show();
|
||
|
break;
|
||
|
case "crop":
|
||
|
ShowHandlers();
|
||
|
break;
|
||
|
case "rotate":
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
/**
|
||
|
* restore to the state the image was
|
||
|
*/
|
||
|
function restoreToOriginal(warning)
|
||
|
{
|
||
|
if(typeof(warning) == "boolean" && warning)
|
||
|
{
|
||
|
if(!window.confirm(warningReset))
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$("#imageContainer").empty();
|
||
|
$("#hiddenImage img").clone().appendTo("#imageContainer");
|
||
|
return true;
|
||
|
|
||
|
|
||
|
};
|
||
|
/*
|
||
|
* left rotate
|
||
|
*/
|
||
|
function leftRotate()
|
||
|
{
|
||
|
|
||
|
var imageToResize = getImageElement();
|
||
|
$(imageToResize).rotate(-90);
|
||
|
swapWidthWithHeight();
|
||
|
addImageHistory();
|
||
|
var angle = $('#angle');
|
||
|
|
||
|
var angleDegree = (parseInt($(angle).val()) + 90);
|
||
|
angleDegree = ((angleDegree == 360)?angleDegree:angleDegree%360);
|
||
|
$(angle).val((angleDegree ));
|
||
|
return false;
|
||
|
|
||
|
};
|
||
|
/**
|
||
|
* cancel mode change
|
||
|
*/
|
||
|
function cancelChangeMode()
|
||
|
{
|
||
|
$('#formAction input[@value=' + $('#image_mode').val() + ']').attr('checked', 'checked');
|
||
|
};
|
||
|
/**
|
||
|
* get the image element which is going to be modified
|
||
|
*/
|
||
|
function getImageElement()
|
||
|
{
|
||
|
var imageElement = null;
|
||
|
var imageContainer = document.getElementById('imageContainer');
|
||
|
for(var i = 0; i < imageContainer.childNodes.length; i++)
|
||
|
{
|
||
|
if((typeof(imageContainer.childNodes[i].name) != "undefined" && imageContainer.childNodes[i].name.toLowerCase() == 'image') || (typeof(imageContainer.childNodes[i].tagName) != "undefined" && (imageContainer.childNodes[i].tagName.toLowerCase() == 'canvas' || imageContainer.childNodes[i].tagName.toLowerCase() == 'img')) )
|
||
|
{
|
||
|
imageElement = imageContainer.childNodes[i];
|
||
|
}
|
||
|
}
|
||
|
return imageElement;
|
||
|
};
|
||
|
/*
|
||
|
right rotate
|
||
|
*/
|
||
|
function rightRotate()
|
||
|
{
|
||
|
|
||
|
var imageToResize = getImageElement();
|
||
|
$(imageToResize).rotate(90);
|
||
|
swapWidthWithHeight();
|
||
|
addImageHistory();
|
||
|
var angle = $('#angle');
|
||
|
|
||
|
|
||
|
var angleDegree = (parseInt($(angle).val()) - 90 );
|
||
|
if(angleDegree < 0)
|
||
|
{
|
||
|
angleDegree += 360;
|
||
|
}
|
||
|
angleDegree = ((angleDegree == 360)?angleDegree:angleDegree%360);
|
||
|
$(angle).val((angleDegree ));
|
||
|
return false;
|
||
|
} ;
|
||
|
/**
|
||
|
* swap image width with height when rotation fired
|
||
|
*/
|
||
|
function swapWidthWithHeight()
|
||
|
{
|
||
|
var imageContainer = $('#imageContainer');
|
||
|
var resizeMe = $('#resizeMe');
|
||
|
var width = $('#width');
|
||
|
var height = $('#height');
|
||
|
var imageToResize = getImageElement();
|
||
|
var newWidth = 0;
|
||
|
var newHeight = 0;
|
||
|
newWidth = $(imageToResize).attr('width');
|
||
|
newHeight = $(imageToResize).attr('height');
|
||
|
$(imageContainer).css('width', newWidth + 'px');
|
||
|
$(imageContainer).css('height', newHeight + 'px');
|
||
|
$(width).val(newWidth);
|
||
|
$(height).val(newHeight);
|
||
|
$(resizeMe).css('width', newWidth + 'px');
|
||
|
$(resizeMe).css('height', newHeight + 'px');
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* records all change mede to the image
|
||
|
* this features will be implemented next release
|
||
|
*/
|
||
|
function addImageHistory()
|
||
|
{
|
||
|
imageHistory = true;
|
||
|
initDisabledButtons(false);
|
||
|
};
|
||
|
|
||
|
|
||
|
/**
|
||
|
* cleare all records
|
||
|
* this features will be implemented next release
|
||
|
*/
|
||
|
function clearImageHistory()
|
||
|
{
|
||
|
imageHistory = false;
|
||
|
initDisabledButtons(true);
|
||
|
|
||
|
|
||
|
};
|
||
|
|
||
|
function initDisabledButtons(forceDisable)
|
||
|
{
|
||
|
if(numSessionHistory)
|
||
|
{
|
||
|
toggleDisabledButton('actionUndo', false);
|
||
|
}else
|
||
|
{
|
||
|
toggleDisabledButton('actionUndo', true);
|
||
|
}
|
||
|
if(imageHistory)
|
||
|
{
|
||
|
toggleDisabledButton('actionSave', false);
|
||
|
toggleDisabledButton('actionReset', false);
|
||
|
}else
|
||
|
{
|
||
|
toggleDisabledButton('actionSave', true);
|
||
|
toggleDisabledButton('actionReset', true);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* return record
|
||
|
* this features will be implemented next release
|
||
|
*/
|
||
|
function getImageHistory()
|
||
|
{
|
||
|
return imageHistory;
|
||
|
};
|
||
|
/**
|
||
|
* check if there exists any changes
|
||
|
* this features will be implemented next release
|
||
|
*/
|
||
|
function isImageHistoryExist()
|
||
|
{
|
||
|
return imageHistory;
|
||
|
};
|
||
|
|
||
|
function flipHorizontal()
|
||
|
{
|
||
|
if(window.confirm(warningFlipHorizotal))
|
||
|
{
|
||
|
addImageHistory();
|
||
|
$('#flip_angle').val('horizontal');
|
||
|
$('#mode').val('flip');
|
||
|
saveImage();
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
};
|
||
|
|
||
|
function flipVertical()
|
||
|
{
|
||
|
if(window.confirm(warningFlipVertical))
|
||
|
{
|
||
|
addImageHistory();
|
||
|
$('#flip_angle').val('vertical');
|
||
|
$('#mode').val('flip');
|
||
|
saveImage();
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
};
|
||
|
|
||
|
function enableFlip()
|
||
|
{
|
||
|
toggleDisabledButton('actionFlipH', false);
|
||
|
toggleDisabledButton('actionFlipV', false);
|
||
|
};
|
||
|
|
||
|
function toggleDisabledButton(buttonId, forceDisable)
|
||
|
{
|
||
|
var disabledButton = $('#' + buttonId);
|
||
|
var newClass = '';
|
||
|
var changeRequired = true;
|
||
|
var toBeDisabled = false;
|
||
|
var currentClass = $(disabledButton).attr('class') ;
|
||
|
if(typeof(forceDisable) == 'boolean')
|
||
|
{
|
||
|
|
||
|
if(forceDisable && currentClass == 'button')
|
||
|
{
|
||
|
newClass = 'disabledButton';
|
||
|
$(disabledButton).attr('disabled', 'disabled');
|
||
|
}else if(!forceDisable && currentClass == 'disabledButton')
|
||
|
{
|
||
|
newClass = 'button';
|
||
|
$(disabledButton).removeAttr('disabled');
|
||
|
}else
|
||
|
{
|
||
|
changeRequired = false;
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
else if(currentClass == 'button')
|
||
|
{
|
||
|
newClass = 'disabledButton';
|
||
|
$(disabledButton).attr('disabled', 'disabled');
|
||
|
}else
|
||
|
{
|
||
|
newClass = 'button';
|
||
|
$(disabledButton).removeAttr('disabled');
|
||
|
}
|
||
|
if(changeRequired)
|
||
|
{
|
||
|
$(disabledButton).removeClass('button disabledButton');
|
||
|
$(disabledButton).addClass(newClass);
|
||
|
}
|
||
|
|
||
|
|
||
|
};
|
||
|
|
||
|
function disableFlip()
|
||
|
{
|
||
|
toggleDisabledButton('actionFlipH', true);
|
||
|
toggleDisabledButton('actionFlipV', true);
|
||
|
};
|
||
|
|
||
|
function undoImage()
|
||
|
{
|
||
|
if(numSessionHistory < 1)
|
||
|
{
|
||
|
alert(warningResetEmpty);
|
||
|
|
||
|
}else
|
||
|
{
|
||
|
if(window.confirm(warningUndoImage))
|
||
|
{
|
||
|
processImage('formAction');
|
||
|
}
|
||
|
|
||
|
}
|
||
|
return false;
|
||
|
|
||
|
};
|
||
|
|
||
|
function processImage(formId)
|
||
|
{
|
||
|
$("#loading")
|
||
|
.ajaxStart(function(){
|
||
|
$(this).show();
|
||
|
})
|
||
|
.ajaxComplete(function(){
|
||
|
$(this).hide();
|
||
|
});
|
||
|
var options =
|
||
|
{
|
||
|
dataType: 'json',
|
||
|
error: function (data, status, e)
|
||
|
{
|
||
|
alert(e);
|
||
|
},
|
||
|
success: function(data)
|
||
|
{
|
||
|
if(typeof(data.error) == 'undefined')
|
||
|
{
|
||
|
alert('Unexpected information ');
|
||
|
}
|
||
|
else if(data.error != '')
|
||
|
{
|
||
|
|
||
|
alert(data.error);
|
||
|
}else
|
||
|
{
|
||
|
$("#loading").show();
|
||
|
|
||
|
currentFolder = data.folder_path;
|
||
|
if(data.save_as == '1')
|
||
|
{
|
||
|
numSessionHistory = 0;
|
||
|
}else
|
||
|
{
|
||
|
numSessionHistory = parseInt(data.history);
|
||
|
}
|
||
|
$('#file_path').val(data.path);
|
||
|
$('#path').val(data.path);
|
||
|
var preImage = new Image();
|
||
|
preImage.width = data.width;
|
||
|
preImage.height = data.height;
|
||
|
preImage.onload = function()
|
||
|
{
|
||
|
|
||
|
$('#hiddenImage').empty();
|
||
|
$(preImage).appendTo('#hiddenImage');
|
||
|
|
||
|
changeMode(false, true);
|
||
|
$('#loading').hide();
|
||
|
$('#windowSaveAs').jqm({modal: true}).jqmHide();
|
||
|
|
||
|
};
|
||
|
var now = new Date();
|
||
|
preImage.src = data.path + "?" + now.getTime();
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
$('#' + formId).ajaxSubmit(options);
|
||
|
return false;
|
||
|
};
|
||
|
|
||
|
function saveAsImagePre()
|
||
|
{
|
||
|
$('#windowSaveAs').jqm({modal: true}).jqmShow();
|
||
|
var saveTo = $('#save_to');
|
||
|
$(saveTo).removeOption(/./);
|
||
|
$(saveTo).ajaxAddOption(urlGetFolderList, {}, false,
|
||
|
function()
|
||
|
{
|
||
|
$(saveTo).selectOptions(currentFolder);
|
||
|
});
|
||
|
return false;
|
||
|
};
|
||
|
|
||
|
function saveAsImage()
|
||
|
{
|
||
|
|
||
|
var pattern=/^[A-Za-z0-9_ \-]+$/i;
|
||
|
|
||
|
var newName = $('#new_name');
|
||
|
|
||
|
var saveAs = $('#save_to').get(0);
|
||
|
//alert($(saveAs).val());
|
||
|
if(!pattern.test($(newName).val()))
|
||
|
{
|
||
|
alert(warningInvalidNewName);
|
||
|
}else if(saveAs.selectedIndex < 0)
|
||
|
{
|
||
|
alert(warningNoFolderSelected);
|
||
|
}else
|
||
|
{
|
||
|
|
||
|
$('#hidden_new_name').val($(newName).val());
|
||
|
$('#hidden_save_to').val(saveAs.options[saveAs.selectedIndex].value);
|
||
|
if(saveImage(true))
|
||
|
{
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
return false;
|
||
|
};
|
||
|
|
||
|
function saveImage(saveAs)
|
||
|
{
|
||
|
if(typeof(saveAs) == 'boolean' && saveAs)
|
||
|
{
|
||
|
|
||
|
}else
|
||
|
{//remove new name if just normal save
|
||
|
$('#hidden_new_name').val('');
|
||
|
$('#hidden_save_to').val('');
|
||
|
}
|
||
|
if (!isImageHistoryExist() && (typeof(saveAs) == 'undefined' || !saveAs))
|
||
|
{
|
||
|
alert(noChangeMadeBeforeSave);
|
||
|
}else
|
||
|
{
|
||
|
|
||
|
if(processImage('formImageInfo'))
|
||
|
{
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
return false;
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
function editorClose()
|
||
|
{
|
||
|
if(window.confirm(warningEditorClose))
|
||
|
{
|
||
|
window.close();
|
||
|
}
|
||
|
return false;
|
||
|
};
|