/** * resizable - jQuery EasyUI * * Licensed under the GPL terms * To use it on other terms please contact us * * Copyright(c) 2009-2012 stworthy [ stworthy@gmail.com ] */ (function($){ var isResizing = false; $.fn.resizable = function(options, param){ if (typeof options == 'string'){ return $.fn.resizable.methods[options](this, param); } function resize(e){ var resizeData = e.data; var options = $.data(resizeData.target, 'resizable').options; if (resizeData.dir.indexOf('e') != -1) { var width = resizeData.startWidth + e.pageX - resizeData.startX; width = Math.min( Math.max(width, options.minWidth), options.maxWidth ); resizeData.width = width; } if (resizeData.dir.indexOf('s') != -1) { var height = resizeData.startHeight + e.pageY - resizeData.startY; height = Math.min( Math.max(height, options.minHeight), options.maxHeight ); resizeData.height = height; } if (resizeData.dir.indexOf('w') != -1) { resizeData.width = resizeData.startWidth - e.pageX + resizeData.startX; if (resizeData.width >= options.minWidth && resizeData.width <= options.maxWidth) { resizeData.left = resizeData.startLeft + e.pageX - resizeData.startX; } } if (resizeData.dir.indexOf('n') != -1) { resizeData.height = resizeData.startHeight - e.pageY + resizeData.startY; if (resizeData.height >= options.minHeight && resizeData.height <= options.maxHeight) { resizeData.top = resizeData.startTop + e.pageY - resizeData.startY; } } } function applySize(e){ var resizeData = e.data; var target = resizeData.target; $(target).css({ left: resizeData.left, top: resizeData.top }); $(target)._outerWidth(resizeData.width)._outerHeight(resizeData.height); } function doDown(e){ isResizing = true; $.data(e.data.target, 'resizable').options.onStartResize.call(e.data.target, e); return false; } function doMove(e){ resize(e); if ($.data(e.data.target, 'resizable').options.onResize.call(e.data.target, e) != false){ applySize(e) } return false; } function doUp(e){ isResizing = false; resize(e, true); applySize(e); $.data(e.data.target, 'resizable').options.onStopResize.call(e.data.target, e); $(document).unbind('.resizable'); $('body').css('cursor',''); // $('body').css('cursor','auto'); return false; } return this.each(function(){ var opts = null; var state = $.data(this, 'resizable'); if (state) { $(this).unbind('.resizable'); opts = $.extend(state.options, options || {}); } else { opts = $.extend({}, $.fn.resizable.defaults, $.fn.resizable.parseOptions(this), options || {}); $.data(this, 'resizable', { options:opts }); } if (opts.disabled == true) { return; } // bind mouse event using namespace resizable $(this).bind('mousemove.resizable', {target:this}, function(e){ if (isResizing) return; var dir = getDirection(e); if (dir == '') { $(e.data.target).css('cursor', ''); } else { $(e.data.target).css('cursor', dir + '-resize'); } }).bind('mouseleave.resizable', {target:this}, function(e){ $(e.data.target).css('cursor', ''); }).bind('mousedown.resizable', {target:this}, function(e){ var dir = getDirection(e); if (dir == '') return; function getCssValue(css) { var val = parseInt($(e.data.target).css(css)); if (isNaN(val)) { return 0; } else { return val; } } var data = { target: e.data.target, dir: dir, startLeft: getCssValue('left'), startTop: getCssValue('top'), left: getCssValue('left'), top: getCssValue('top'), startX: e.pageX, startY: e.pageY, startWidth: $(e.data.target).outerWidth(), startHeight: $(e.data.target).outerHeight(), width: $(e.data.target).outerWidth(), height: $(e.data.target).outerHeight(), deltaWidth: $(e.data.target).outerWidth() - $(e.data.target).width(), deltaHeight: $(e.data.target).outerHeight() - $(e.data.target).height() }; $(document).bind('mousedown.resizable', data, doDown); $(document).bind('mousemove.resizable', data, doMove); $(document).bind('mouseup.resizable', data, doUp); $('body').css('cursor', dir+'-resize'); }); // get the resize direction function getDirection(e) { var tt = $(e.data.target); var dir = ''; var offset = tt.offset(); var width = tt.outerWidth(); var height = tt.outerHeight(); var edge = opts.edge; if (e.pageY > offset.top && e.pageY < offset.top + edge) { dir += 'n'; } else if (e.pageY < offset.top + height && e.pageY > offset.top + height - edge) { dir += 's'; } if (e.pageX > offset.left && e.pageX < offset.left + edge) { dir += 'w'; } else if (e.pageX < offset.left + width && e.pageX > offset.left + width - edge) { dir += 'e'; } var handles = opts.handles.split(','); for(var i=0; i