Resizable: alsoResize more than one element of a jQuery selection

Fixes #4666
Closes gh-1324
Closes gh-1461
This commit is contained in:
Ben Mosher 2014-08-25 14:07:25 -04:00 committed by Scott González
parent 18e301f4e2
commit 19783fd3e6
2 changed files with 52 additions and 48 deletions

View File

@ -432,4 +432,34 @@ test( "alsoResize + containment", function() {
equal( other.height(), 150, "alsoResize constrained height at containment edge" );
});
test( "alsoResize + multiple selection", function() {
expect( 6 );
var other1 = $( "<div>" )
.addClass( "other" )
.css({
width: 50,
height: 50
})
.appendTo( "body" ),
other2 = $( "<div>" )
.addClass( "other" )
.css({
width: 50,
height: 50
})
.appendTo( "body"),
element = $( "#resizable1" ).resizable({
alsoResize: other1.add( other2 ),
containment: "#container"
});
TestHelpers.resizable.drag( ".ui-resizable-se", 400, 400 );
equal( element.width(), 300, "resizable constrained width at containment edge" );
equal( element.height(), 200, "resizable constrained height at containment edge" );
equal( other1.width(), 250, "alsoResize o1 constrained width at containment edge" );
equal( other1.height(), 150, "alsoResize o1 constrained height at containment edge" );
equal( other2.width(), 250, "alsoResize o2 constrained width at containment edge" );
equal( other2.height(), 150, "alsoResize o2 constrained height at containment edge" );
});
})(jQuery);

View File

@ -991,29 +991,15 @@ $.ui.plugin.add("resizable", "alsoResize", {
start: function() {
var that = $(this).resizable( "instance" ),
o = that.options,
_store = function(exp) {
$(exp).each(function() {
var el = $(this);
el.data("ui-resizable-alsoresize", {
width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
});
});
};
o = that.options;
if (typeof(o.alsoResize) === "object" && !o.alsoResize.parentNode) {
if (o.alsoResize.length) {
o.alsoResize = o.alsoResize[0];
_store(o.alsoResize);
} else {
$.each(o.alsoResize, function(exp) {
_store(exp);
});
}
} else {
_store(o.alsoResize);
}
$(o.alsoResize).each(function() {
var el = $(this);
el.data("ui-resizable-alsoresize", {
width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
});
});
},
resize: function(event, ui) {
@ -1026,35 +1012,23 @@ $.ui.plugin.add("resizable", "alsoResize", {
width: (that.size.width - os.width) || 0,
top: (that.position.top - op.top) || 0,
left: (that.position.left - op.left) || 0
},
_alsoResize = function(exp, c) {
$(exp).each(function() {
var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
css = c && c.length ?
c :
el.parents(ui.originalElement[0]).length ?
[ "width", "height" ] :
[ "width", "height", "top", "left" ];
$.each(css, function(i, prop) {
var sum = (start[prop] || 0) + (delta[prop] || 0);
if (sum && sum >= 0) {
style[prop] = sum || null;
}
});
el.css(style);
});
};
if (typeof(o.alsoResize) === "object" && !o.alsoResize.nodeType) {
$.each(o.alsoResize, function(exp, c) {
_alsoResize(exp, c);
$(o.alsoResize).each(function() {
var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
css = el.parents(ui.originalElement[0]).length ?
[ "width", "height" ] :
[ "width", "height", "top", "left" ];
$.each(css, function(i, prop) {
var sum = (start[prop] || 0) + (delta[prop] || 0);
if (sum && sum >= 0) {
style[prop] = sum || null;
}
});
el.css(style);
});
} else {
_alsoResize(o.alsoResize);
}
},
stop: function() {