You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
2.6 KiB
110 lines
2.6 KiB
(function($){
|
|
var doc = $(document),
|
|
win = $(window),
|
|
mouseDown = 'mousedown.resize',
|
|
mouseMove = 'mousemove.resize',
|
|
mouseUp = 'mouseup.resize',
|
|
clsName = 'CursorResize',
|
|
resize = function (e) {
|
|
var o = this,
|
|
a = o.wrapper.width('auto'),
|
|
b = o.target,
|
|
c = 0,
|
|
d = 0,
|
|
f = b.offset();
|
|
if (a)
|
|
{
|
|
c = a.width() - b.width();
|
|
d = a.height() - b.height();
|
|
f = a.offset();
|
|
}
|
|
var m = $.extend({
|
|
width : win.width() - (f.left - doc.scrollLeft()) - c,
|
|
height : win.height() - (f.top - doc.scrollTop()) - d
|
|
}, o.max),
|
|
w = Math.min(Math.max(e.pageX - o.x + o.w, o.min.width), m.width),
|
|
h = Math.min(Math.max(e.pageY - o.y + o.h, o.min.height),m.height);
|
|
b.css({ width : w, height : h });
|
|
return false;
|
|
},
|
|
end = function () {
|
|
doc.unbind(mouseMove + ' ' + mouseUp);
|
|
},
|
|
start = function (e) {
|
|
var E = this,
|
|
T = E.target;
|
|
E.x = e.pageX;
|
|
E.y = e.pageY;
|
|
E.w = T.outerWidth() - T.getPadding().w;
|
|
E.h = T.outerHeight() - T.getPadding().h;
|
|
if (E.min.width === 0)
|
|
{
|
|
var MW = T.data('_mw');
|
|
if (MW)
|
|
{
|
|
E.min.width = MW;
|
|
}
|
|
else
|
|
{
|
|
E.min.width = T.outerWidth() - T.getPadding().w;
|
|
T.data('_mw', E.min.width);
|
|
}
|
|
}
|
|
if (this.min.height === 0)
|
|
{
|
|
var MH = T.data('_mh');
|
|
if (MH)
|
|
{
|
|
E.min.height = MH;
|
|
}
|
|
else
|
|
{
|
|
E.min.height = T.outerHeight() - T.getPadding().h;
|
|
T.data('_mh', E.min.height);
|
|
}
|
|
}
|
|
doc.bind(mouseMove, $.proxy(resize, E)).bind(mouseUp, end);
|
|
return false;
|
|
};
|
|
$.fn.resize = function(o){
|
|
o = $.extend({ min : { width : 0, height: 0 }}, o);
|
|
/*
|
|
options = {
|
|
handler : null,
|
|
wrapper : null,
|
|
min : { width : 0, height: 0},
|
|
max : { width : 0, height: 0}
|
|
};
|
|
*/
|
|
return this.each(function(){
|
|
var e = $(this),
|
|
x = function () {
|
|
this.target = e;
|
|
this.handler = o.handler ? (typeof o.handler === 'string' ? $(o.handler, e[0]) : o.handler) : e;
|
|
this.wrapper = o.wrapper;
|
|
e.data('_h', this.handler);
|
|
this.min = o.min;
|
|
this.max = o.max;
|
|
if (o.min) $.extend(this.min, o.min);
|
|
return this;
|
|
},
|
|
X = new x();
|
|
X.handler.addClass(clsName).unbind(mouseDown).bind(mouseDown, $.proxy(start, X));
|
|
});
|
|
};
|
|
$.fn.unResize = function () {
|
|
return this.each(function(){
|
|
($(this).data('_h') || $()).removeClass(clsName).unbind(mouseDown);
|
|
});
|
|
};
|
|
$.fn.getPadding = function () {
|
|
var s = this[0].style,
|
|
o =
|
|
{
|
|
w : parseInt(s.paddingLeft) + parseInt(s.paddingRight) || 0,
|
|
h : parseInt(s.paddingTop) + parseInt(s.paddingBottom) || 0
|
|
};
|
|
return o;
|
|
};
|
|
})($);
|