Draggable: fix current JSCS violations.

This commit is contained in:
Mike Sherov 2014-02-17 16:08:41 -05:00
parent 39ef4afb3c
commit 7017805745
4 changed files with 108 additions and 101 deletions

View File

@ -157,7 +157,7 @@ grunt.initConfig({
}, },
jscs: { jscs: {
// datepicker, sortable, resizable and draggable are getting rewritten, ignore until that's done // datepicker, sortable, resizable and draggable are getting rewritten, ignore until that's done
ui: [ "ui/*.js", "!ui/datepicker.js", "!ui/sortable.js", "!ui/resizable.js", "!ui/draggable.js" ], ui: [ "ui/*.js", "!ui/datepicker.js", "!ui/sortable.js", "!ui/resizable.js" ],
// TODO enable this once we have a tool that can help with fixing formatting of existing files // TODO enable this once we have a tool that can help with fixing formatting of existing files
// tests: "tests/unit/**/*.js", // tests: "tests/unit/**/*.js",
grunt: "Gruntfile.js" grunt: "Gruntfile.js"

View File

@ -85,7 +85,7 @@ test( "{ appendTo: Selector }", function() {
test( "appendTo, default, switching after initialization", function() { test( "appendTo, default, switching after initialization", function() {
expect( 2 ); expect( 2 );
var element = $( "#draggable1" ).draggable({ helper : "clone" }); var element = $( "#draggable1" ).draggable({ helper: "clone" });
TestHelpers.draggable.trackAppendedParent( element ); TestHelpers.draggable.trackAppendedParent( element );
@ -140,7 +140,7 @@ test( "{ axis: ? }, unexpected", function() {
test( "axis, default, switching after initialization", function() { test( "axis, default, switching after initialization", function() {
expect( 6 ); expect( 6 );
var element = $( "#draggable1" ).draggable({ axis : false }); var element = $( "#draggable1" ).draggable({ axis: false });
// Any Direction // Any Direction
TestHelpers.draggable.shouldMove( element, "axis: default" ); TestHelpers.draggable.shouldMove( element, "axis: default" );
@ -504,12 +504,12 @@ test( "cursorAt", function() {
var deltaX = -3, var deltaX = -3,
deltaY = -3, deltaY = -3,
tests = { tests = {
"false": { cursorAt : false }, "false": { cursorAt: false },
"{ left: -5, top: -5 }": { x: -5, y: -5, cursorAt : { left: -5, top: -5 } }, "{ left: -5, top: -5 }": { x: -5, y: -5, cursorAt: { left: -5, top: -5 } },
"[ 10, 20 ]": { x: 10, y: 20, cursorAt : [ 10, 20 ] }, "[ 10, 20 ]": { x: 10, y: 20, cursorAt: [ 10, 20 ] },
"'10 20'": { x: 10, y: 20, cursorAt : "10 20" }, "'10 20'": { x: 10, y: 20, cursorAt: "10 20" },
"{ left: 20, top: 40 }": { x: 20, y: 40, cursorAt : { left: 20, top: 40 } }, "{ left: 20, top: 40 }": { x: 20, y: 40, cursorAt: { left: 20, top: 40 } },
"{ right: 10, bottom: 20 }": { x: 10, y: 20, cursorAt : { right: 10, bottom: 20 } } "{ right: 10, bottom: 20 }": { x: 10, y: 20, cursorAt: { right: 10, bottom: 20 } }
}; };
$.each( tests, function( testName, testData ) { $.each( tests, function( testName, testData ) {
@ -517,10 +517,10 @@ test( "cursorAt", function() {
var element = $( "#draggable" + ( i + 1 ) ).draggable({ var element = $( "#draggable" + ( i + 1 ) ).draggable({
cursorAt: testData.cursorAt, cursorAt: testData.cursorAt,
drag: function( event, ui ) { drag: function( event, ui ) {
if( !testData.cursorAt ) { if ( !testData.cursorAt ) {
equal( ui.position.left - ui.originalPosition.left, deltaX, testName + " " + position + " left" ); equal( ui.position.left - ui.originalPosition.left, deltaX, testName + " " + position + " left" );
equal( ui.position.top - ui.originalPosition.top, deltaY, testName + " " + position + " top" ); equal( ui.position.top - ui.originalPosition.top, deltaY, testName + " " + position + " top" );
} else if( testData.cursorAt.right ) { } else if ( testData.cursorAt.right ) {
equal( ui.helper.width() - ( event.clientX - ui.offset.left ), testData.x - TestHelpers.draggable.unreliableOffset, testName + " " + position + " left" ); equal( ui.helper.width() - ( event.clientX - ui.offset.left ), testData.x - TestHelpers.draggable.unreliableOffset, testName + " " + position + " left" );
equal( ui.helper.height() - ( event.clientY - ui.offset.top ), testData.y - TestHelpers.draggable.unreliableOffset, testName + " " +position + " top" ); equal( ui.helper.height() - ( event.clientY - ui.offset.top ), testData.y - TestHelpers.draggable.unreliableOffset, testName + " " +position + " top" );
} else { } else {
@ -545,12 +545,12 @@ test( "cursorAt, switching after initialization", function() {
var deltaX = -3, var deltaX = -3,
deltaY = -3, deltaY = -3,
tests = { tests = {
"false": { cursorAt : false }, "false": { cursorAt: false },
"{ left: -5, top: -5 }": { x: -5, y: -5, cursorAt : { left: -5, top: -5 } }, "{ left: -5, top: -5 }": { x: -5, y: -5, cursorAt: { left: -5, top: -5 } },
"[ 10, 20 ]": { x: 10, y: 20, cursorAt : [ 10, 20 ] }, "[ 10, 20 ]": { x: 10, y: 20, cursorAt: [ 10, 20 ] },
"'10 20'": { x: 10, y: 20, cursorAt : "10 20" }, "'10 20'": { x: 10, y: 20, cursorAt: "10 20" },
"{ left: 20, top: 40 }": { x: 20, y: 40, cursorAt : { left: 20, top: 40 } }, "{ left: 20, top: 40 }": { x: 20, y: 40, cursorAt: { left: 20, top: 40 } },
"{ right: 10, bottom: 20 }": { x: 10, y: 20, cursorAt : { right: 10, bottom: 20 } } "{ right: 10, bottom: 20 }": { x: 10, y: 20, cursorAt: { right: 10, bottom: 20 } }
}; };
$.each( tests, function( testName, testData ) { $.each( tests, function( testName, testData ) {
@ -559,10 +559,10 @@ test( "cursorAt, switching after initialization", function() {
element.draggable({ element.draggable({
drag: function( event, ui ) { drag: function( event, ui ) {
if( !testData.cursorAt ) { if ( !testData.cursorAt ) {
equal( ui.position.left - ui.originalPosition.left, deltaX, testName + " " + position + " left" ); equal( ui.position.left - ui.originalPosition.left, deltaX, testName + " " + position + " left" );
equal( ui.position.top - ui.originalPosition.top, deltaY, testName + " " + position + " top" ); equal( ui.position.top - ui.originalPosition.top, deltaY, testName + " " + position + " top" );
} else if( testData.cursorAt.right ) { } else if ( testData.cursorAt.right ) {
equal( ui.helper.width() - ( event.clientX - ui.offset.left ), testData.x - TestHelpers.draggable.unreliableOffset, testName + " " + position + " left" ); equal( ui.helper.width() - ( event.clientX - ui.offset.left ), testData.x - TestHelpers.draggable.unreliableOffset, testName + " " + position + " left" );
equal( ui.helper.height() - ( event.clientY - ui.offset.top ), testData.y - TestHelpers.draggable.unreliableOffset, testName + " " +position + " top" ); equal( ui.helper.height() - ( event.clientY - ui.offset.top ), testData.y - TestHelpers.draggable.unreliableOffset, testName + " " +position + " top" );
} else { } else {
@ -672,7 +672,7 @@ test( "helper, default, switching after initialization", function() {
}); });
/* jshint loopfunc: true */ /* jshint loopfunc: true */
(function(){ (function() {
var k, l, m, var k, l, m,
scrollElements = { scrollElements = {
"no elements": [], "no elements": [],
@ -689,7 +689,7 @@ test( "helper, default, switching after initialization", function() {
for ( m = 0 ; m < helpers.length; m++ ) { for ( m = 0 ; m < helpers.length; m++ ) {
for ( l = 0; l < positions.length; l++ ) { for ( l = 0; l < positions.length; l++ ) {
for ( k in scrollElements ) { for ( k in scrollElements ) {
(function( position, helper, scrollElements, scrollElementsTitle ){ (function( position, helper, scrollElements, scrollElementsTitle ) {
test( "{ helper: '" + helper + "' }, " + position + ", with scroll offset on " + scrollElementsTitle, function() { test( "{ helper: '" + helper + "' }, " + position + ", with scroll offset on " + scrollElementsTitle, function() {
expect( scrollPositions.length * 2 ); expect( scrollPositions.length * 2 );

View File

@ -2,7 +2,7 @@ TestHelpers.draggable = {
// TODO: remove the unreliable offset hacks // TODO: remove the unreliable offset hacks
unreliableOffset: $.ui.ie && ( !document.documentMode || document.documentMode < 8 ) ? 2 : 0, unreliableOffset: $.ui.ie && ( !document.documentMode || document.documentMode < 8 ) ? 2 : 0,
// Support: Opera 12.10, Safari 5.1, jQuery <1.8 // Support: Opera 12.10, Safari 5.1, jQuery <1.8
unreliableContains: (function(){ unreliableContains: (function() {
var element = $( "<div>" ); var element = $( "<div>" );
return $.contains( element[ 0 ].ownerDocument, element[ 0 ] ); return $.contains( element[ 0 ].ownerDocument, element[ 0 ] );
})(), })(),
@ -12,17 +12,27 @@ TestHelpers.draggable = {
$( el ).one( "dragstop", function( event, ui ) { $( el ).one( "dragstop", function( event, ui ) {
var positionExpected = { left: ui.originalPosition.left + expectedDX, top: ui.originalPosition.top + expectedDY }; var positionExpected = { left: ui.originalPosition.left + expectedDX, top: ui.originalPosition.top + expectedDY };
deepEqual( ui.position, positionExpected, "position dragged[" + dx + ", " + dy + "] " + msg ); deepEqual( ui.position, positionExpected, "position dragged[" + dx + ", " + dy + "] " + msg );
} ); });
}, },
testDragOffset: function( el, dx, dy, expectedDX, expectedDY, msg ) { testDragOffset: function( el, dx, dy, expectedDX, expectedDY, msg ) {
msg = msg ? msg + "." : ""; msg = msg ? msg + "." : "";
var offsetBefore = el.offset(),
offsetExpected = { left: offsetBefore.left + expectedDX, top: offsetBefore.top + expectedDY };
$( el ).one( "dragstop", function( event, ui ) {
deepEqual( ui.offset, offsetExpected, "offset dragged[" + dx + ", " + dy + "] " + msg );
});
},
testDragHelperOffset: function( el, dx, dy, expectedDX, expectedDY, msg ) {
msg = msg ? msg + "." : "";
var offsetBefore = el.offset(), var offsetBefore = el.offset(),
offsetExpected = { left: offsetBefore.left + expectedDX, top: offsetBefore.top + expectedDY }; offsetExpected = { left: offsetBefore.left + expectedDX, top: offsetBefore.top + expectedDY };
$( el ).one( "dragstop", function( event, ui ) { $( el ).one( "dragstop", function( event, ui ) {
deepEqual( ui.helper.offset(), offsetExpected, "offset dragged[" + dx + ", " + dy + "] " + msg ); deepEqual( ui.helper.offset(), offsetExpected, "offset dragged[" + dx + ", " + dy + "] " + msg );
} ); });
}, },
testDrag: function( el, handle, dx, dy, expectedDX, expectedDY, msg ) { testDrag: function( el, handle, dx, dy, expectedDX, expectedDY, msg ) {
TestHelpers.draggable.testDragPosition( el, dx, dy, expectedDX, expectedDY, msg ); TestHelpers.draggable.testDragPosition( el, dx, dy, expectedDX, expectedDY, msg );
@ -55,14 +65,14 @@ TestHelpers.draggable = {
handle = handle || el; handle = handle || el;
$( el ).bind( "dragstop", function() { $( el ).bind( "dragstop", function() {
ok( false, "should not drag " + msg ); ok( false, "should not drag " + msg );
} ); });
$( handle ).simulate( "drag", { $( handle ).simulate( "drag", {
dx: 100, dx: 100,
dy: 100 dy: 100
}); });
$( el ).unbind( "dragstop" ); $( el ).unbind( "dragstop" );
}, },
setScrollable: function ( what, isScrollable ) { setScrollable: function( what, isScrollable ) {
var overflow = isScrollable ? "scroll" : "hidden"; var overflow = isScrollable ? "scroll" : "hidden";
$( what ).css({ overflow: overflow, overflowX: overflow, overflowY: overflow }); $( what ).css({ overflow: overflow, overflowX: overflow, overflowY: overflow });
}, },
@ -90,12 +100,12 @@ TestHelpers.draggable = {
dy: y dy: y
}); });
}, },
trackMouseCss : function( el ) { trackMouseCss: function( el ) {
el.bind( "drag", function() { el.bind( "drag", function() {
el.data( "last_dragged_cursor", $( "body" ).css( "cursor" ) ); el.data( "last_dragged_cursor", $( "body" ).css( "cursor" ) );
}); });
}, },
trackAppendedParent : function( el ) { trackAppendedParent: function( el ) {
// TODO: appendTo is currently ignored if helper is original (see #7044) // TODO: appendTo is currently ignored if helper is original (see #7044)
el.draggable( "option", "helper", "clone" ); el.draggable( "option", "helper", "clone" );

View File

@ -122,7 +122,7 @@ $.widget("ui.draggable", $.ui.mouse, {
$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() { $(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
$("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>") $("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>")
.css({ .css({
width: this.offsetWidth+"px", height: this.offsetHeight+"px", width: this.offsetWidth + "px", height: this.offsetHeight + "px",
position: "absolute", opacity: "0.001", zIndex: 1000 position: "absolute", opacity: "0.001", zIndex: 1000
}) })
.css($(this).offset()) .css($(this).offset())
@ -146,7 +146,7 @@ $.widget("ui.draggable", $.ui.mouse, {
this._cacheHelperProportions(); this._cacheHelperProportions();
//If ddmanager is used for droppables, set the global draggable //If ddmanager is used for droppables, set the global draggable
if($.ui.ddmanager) { if ($.ui.ddmanager) {
$.ui.ddmanager.current = this; $.ui.ddmanager.current = this;
} }
@ -195,7 +195,7 @@ $.widget("ui.draggable", $.ui.mouse, {
this._setContainment(); this._setContainment();
//Trigger event + callbacks //Trigger event + callbacks
if(this._trigger("start", event) === false) { if (this._trigger("start", event) === false) {
this._clear(); this._clear();
return false; return false;
} }
@ -208,7 +208,6 @@ $.widget("ui.draggable", $.ui.mouse, {
$.ui.ddmanager.prepareOffsets(this, event); $.ui.ddmanager.prepareOffsets(this, event);
} }
this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003) //If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
@ -232,7 +231,7 @@ $.widget("ui.draggable", $.ui.mouse, {
//Call plugins and callbacks and use the resulting position if something is returned //Call plugins and callbacks and use the resulting position if something is returned
if (!noPropagation) { if (!noPropagation) {
var ui = this._uiHash(); var ui = this._uiHash();
if(this._trigger("drag", event, ui) === false) { if (this._trigger("drag", event, ui) === false) {
this._mouseUp({}); this._mouseUp({});
return false; return false;
} }
@ -242,7 +241,7 @@ $.widget("ui.draggable", $.ui.mouse, {
this.helper[ 0 ].style.left = this.position.left + "px"; this.helper[ 0 ].style.left = this.position.left + "px";
this.helper[ 0 ].style.top = this.position.top + "px"; this.helper[ 0 ].style.top = this.position.top + "px";
if($.ui.ddmanager) { if ($.ui.ddmanager) {
$.ui.ddmanager.drag(this, event); $.ui.ddmanager.drag(this, event);
} }
@ -259,19 +258,19 @@ $.widget("ui.draggable", $.ui.mouse, {
} }
//if a drop comes from outside (a sortable) //if a drop comes from outside (a sortable)
if(this.dropped) { if (this.dropped) {
dropped = this.dropped; dropped = this.dropped;
this.dropped = false; this.dropped = false;
} }
if((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) { if ((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() { $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
if(that._trigger("stop", event) !== false) { if (that._trigger("stop", event) !== false) {
that._clear(); that._clear();
} }
}); });
} else { } else {
if(this._trigger("stop", event) !== false) { if (this._trigger("stop", event) !== false) {
this._clear(); this._clear();
} }
} }
@ -286,7 +285,7 @@ $.widget("ui.draggable", $.ui.mouse, {
}); });
//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003) //If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
if( $.ui.ddmanager ) { if ( $.ui.ddmanager ) {
$.ui.ddmanager.dragStop(this, event); $.ui.ddmanager.dragStop(this, event);
} }
@ -298,7 +297,7 @@ $.widget("ui.draggable", $.ui.mouse, {
cancel: function() { cancel: function() {
if(this.helper.is(".ui-draggable-dragging")) { if (this.helper.is(".ui-draggable-dragging")) {
this._mouseUp({}); this._mouseUp({});
} else { } else {
this._clear(); this._clear();
@ -328,13 +327,13 @@ $.widget("ui.draggable", $.ui.mouse, {
_createHelper: function(event) { _createHelper: function(event) {
var o = this.options, var o = this.options,
helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper === "clone" ? this.element.clone().removeAttr("id") : this.element); helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[ 0 ], [ event ])) : (o.helper === "clone" ? this.element.clone().removeAttr("id") : this.element);
if(!helper.parents("body").length) { if (!helper.parents("body").length) {
helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo)); helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
} }
if(helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) { if (helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
helper.css("position", "absolute"); helper.css("position", "absolute");
} }
@ -347,7 +346,7 @@ $.widget("ui.draggable", $.ui.mouse, {
obj = obj.split(" "); obj = obj.split(" ");
} }
if ($.isArray(obj)) { if ($.isArray(obj)) {
obj = {left: +obj[0], top: +obj[1] || 0}; obj = { left: +obj[0], top: +obj[1] || 0 };
} }
if ("left" in obj) { if ("left" in obj) {
this.offset.click.left = obj.left + this.margins.left; this.offset.click.left = obj.left + this.margins.left;
@ -377,7 +376,7 @@ $.widget("ui.draggable", $.ui.mouse, {
// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
// the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) { if (this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
po.left += this.scrollParent.scrollLeft(); po.left += this.scrollParent.scrollLeft();
po.top += this.scrollParent.scrollTop(); po.top += this.scrollParent.scrollTop();
} }
@ -469,7 +468,7 @@ $.widget("ui.draggable", $.ui.mouse, {
c = $( o.containment ); c = $( o.containment );
ce = c[ 0 ]; ce = c[ 0 ];
if( !ce ) { if ( !ce ) {
return; return;
} }
@ -477,7 +476,7 @@ $.widget("ui.draggable", $.ui.mouse, {
this.containment = [ this.containment = [
( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ), ( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ) , ( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ),
( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - this.helperProportions.width - this.margins.left - this.margins.right, ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - this.helperProportions.width - this.margins.left - this.margins.right,
( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - this.helperProportions.height - this.margins.top - this.margins.bottom ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - this.helperProportions.height - this.margins.top - this.margins.bottom
]; ];
@ -486,7 +485,7 @@ $.widget("ui.draggable", $.ui.mouse, {
_convertPositionTo: function(d, pos) { _convertPositionTo: function(d, pos) {
if(!pos) { if (!pos) {
pos = this.position; pos = this.position;
} }
@ -542,26 +541,25 @@ $.widget("ui.draggable", $.ui.mouse, {
this.containment[ 2 ] + co.left, this.containment[ 2 ] + co.left,
this.containment[ 3 ] + co.top this.containment[ 3 ] + co.top
]; ];
} } else {
else {
containment = this.containment; containment = this.containment;
} }
if(event.pageX - this.offset.click.left < containment[0]) { if (event.pageX - this.offset.click.left < containment[0]) {
pageX = containment[0] + this.offset.click.left; pageX = containment[0] + this.offset.click.left;
} }
if(event.pageY - this.offset.click.top < containment[1]) { if (event.pageY - this.offset.click.top < containment[1]) {
pageY = containment[1] + this.offset.click.top; pageY = containment[1] + this.offset.click.top;
} }
if(event.pageX - this.offset.click.left > containment[2]) { if (event.pageX - this.offset.click.left > containment[2]) {
pageX = containment[2] + this.offset.click.left; pageX = containment[2] + this.offset.click.left;
} }
if(event.pageY - this.offset.click.top > containment[3]) { if (event.pageY - this.offset.click.top > containment[3]) {
pageY = containment[3] + this.offset.click.top; pageY = containment[3] + this.offset.click.top;
} }
} }
if(o.grid) { if (o.grid) {
//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950) //Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY; top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
@ -600,7 +598,7 @@ $.widget("ui.draggable", $.ui.mouse, {
_clear: function() { _clear: function() {
this.helper.removeClass("ui-draggable-dragging"); this.helper.removeClass("ui-draggable-dragging");
if(this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) { if (this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
this.helper.remove(); this.helper.remove();
} }
this.helper = null; this.helper = null;
@ -616,7 +614,7 @@ $.widget("ui.draggable", $.ui.mouse, {
ui = ui || this._uiHash(); ui = ui || this._uiHash();
$.ui.plugin.call( this, type, [ event, ui, this ], true ); $.ui.plugin.call( this, type, [ event, ui, this ], true );
//The absolute position has to be recalculated after plugins //The absolute position has to be recalculated after plugins
if(type === "drag") { if (type === "drag") {
this.positionAbs = this._convertPositionTo("absolute"); this.positionAbs = this._convertPositionTo("absolute");
} }
return $.Widget.prototype._trigger.call(this, type, event, ui); return $.Widget.prototype._trigger.call(this, type, event, ui);
@ -662,7 +660,7 @@ $.ui.plugin.add("draggable", "connectToSortable", {
}); });
$.each(inst.sortables, function() { $.each(inst.sortables, function() {
if(this.instance.isOver) { if (this.instance.isOver) {
this.instance.isOver = 0; this.instance.isOver = 0;
@ -670,7 +668,7 @@ $.ui.plugin.add("draggable", "connectToSortable", {
this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work) this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: "valid/invalid" //The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: "valid/invalid"
if(this.shouldRevert) { if (this.shouldRevert) {
this.instance.options.revert = this.shouldRevert; this.instance.options.revert = this.shouldRevert;
} }
@ -680,7 +678,7 @@ $.ui.plugin.add("draggable", "connectToSortable", {
this.instance.options.helper = this.instance.options._helper; this.instance.options.helper = this.instance.options._helper;
//If the helper has been the original item, restore properties in the sortable //If the helper has been the original item, restore properties in the sortable
if(inst.options.helper === "original") { if (inst.options.helper === "original") {
this.instance.currentItem.css({ top: "auto", left: "auto" }); this.instance.currentItem.css({ top: "auto", left: "auto" });
} }
@ -706,9 +704,9 @@ $.ui.plugin.add("draggable", "connectToSortable", {
this.instance.helperProportions = inst.helperProportions; this.instance.helperProportions = inst.helperProportions;
this.instance.offset.click = inst.offset.click; this.instance.offset.click = inst.offset.click;
if(this.instance._intersectsWith(this.instance.containerCache)) { if (this.instance._intersectsWith(this.instance.containerCache)) {
innermostIntersecting = true; innermostIntersecting = true;
$.each(inst.sortables, function () { $.each(inst.sortables, function() {
this.instance.positionAbs = inst.positionAbs; this.instance.positionAbs = inst.positionAbs;
this.instance.helperProportions = inst.helperProportions; this.instance.helperProportions = inst.helperProportions;
this.instance.offset.click = inst.offset.click; this.instance.offset.click = inst.offset.click;
@ -722,10 +720,9 @@ $.ui.plugin.add("draggable", "connectToSortable", {
}); });
} }
if (innermostIntersecting) {
if(innermostIntersecting) {
//If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once //If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
if(!this.instance.isOver) { if (!this.instance.isOver) {
this.instance.isOver = 1; this.instance.isOver = 1;
//Now we fake the start of dragging for the sortable instance, //Now we fake the start of dragging for the sortable instance,
@ -754,7 +751,7 @@ $.ui.plugin.add("draggable", "connectToSortable", {
} }
//Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable //Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
if(this.instance.currentItem) { if (this.instance.currentItem) {
this.instance._mouseDrag(event); this.instance._mouseDrag(event);
} }
@ -762,7 +759,7 @@ $.ui.plugin.add("draggable", "connectToSortable", {
//If it doesn't intersect with the sortable, and it intersected before, //If it doesn't intersect with the sortable, and it intersected before,
//we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval //we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
if(this.instance.isOver) { if (this.instance.isOver) {
this.instance.isOver = 0; this.instance.isOver = 0;
this.instance.cancelHelperRemoval = true; this.instance.cancelHelperRemoval = true;
@ -778,7 +775,7 @@ $.ui.plugin.add("draggable", "connectToSortable", {
//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size //Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
this.instance.currentItem.remove(); this.instance.currentItem.remove();
if(this.instance.placeholder) { if (this.instance.placeholder) {
this.instance.placeholder.remove(); this.instance.placeholder.remove();
} }
@ -815,14 +812,14 @@ $.ui.plugin.add("draggable", "opacity", {
start: function( event, ui, instance ) { start: function( event, ui, instance ) {
var t = $( ui.helper ), var t = $( ui.helper ),
o = instance.options; o = instance.options;
if(t.css("opacity")) { if (t.css("opacity")) {
o._opacity = t.css("opacity"); o._opacity = t.css("opacity");
} }
t.css("opacity", o.opacity); t.css("opacity", o.opacity);
}, },
stop: function( event, ui, instance ) { stop: function( event, ui, instance ) {
var o = instance.options; var o = instance.options;
if(o._opacity) { if (o._opacity) {
$(ui.helper).css("opacity", o._opacity); $(ui.helper).css("opacity", o._opacity);
} }
} }
@ -830,7 +827,7 @@ $.ui.plugin.add("draggable", "opacity", {
$.ui.plugin.add("draggable", "scroll", { $.ui.plugin.add("draggable", "scroll", {
start: function( event, ui, i ) { start: function( event, ui, i ) {
if( i.scrollParent[ 0 ] !== i.document[ 0 ] && i.scrollParent[ 0 ].tagName !== "HTML" ) { if ( i.scrollParent[ 0 ] !== i.document[ 0 ] && i.scrollParent[ 0 ].tagName !== "HTML" ) {
i.overflowOffset = i.scrollParent.offset(); i.overflowOffset = i.scrollParent.offset();
} }
}, },
@ -840,44 +837,44 @@ $.ui.plugin.add("draggable", "scroll", {
scrolled = false, scrolled = false,
document = i.document[ 0 ]; document = i.document[ 0 ];
if( i.scrollParent[ 0 ] !== document && i.scrollParent[ 0 ].tagName !== "HTML" ) { if ( i.scrollParent[ 0 ] !== document && i.scrollParent[ 0 ].tagName !== "HTML" ) {
if(!o.axis || o.axis !== "x") { if (!o.axis || o.axis !== "x") {
if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) { if ((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed; i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
} else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) { } else if (event.pageY - i.overflowOffset.top < o.scrollSensitivity) {
i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed; i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
} }
} }
if(!o.axis || o.axis !== "y") { if (!o.axis || o.axis !== "y") {
if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) { if ((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed; i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
} else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) { } else if (event.pageX - i.overflowOffset.left < o.scrollSensitivity) {
i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed; i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
} }
} }
} else { } else {
if(!o.axis || o.axis !== "x") { if (!o.axis || o.axis !== "x") {
if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) { if (event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) { } else if ($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
} }
} }
if(!o.axis || o.axis !== "y") { if (!o.axis || o.axis !== "y") {
if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) { if (event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) { } else if ($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
} }
} }
} }
if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) { if (scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
$.ui.ddmanager.prepareOffsets(i, event); $.ui.ddmanager.prepareOffsets(i, event);
} }
@ -894,7 +891,7 @@ $.ui.plugin.add("draggable", "snap", {
$(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() { $(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
var $t = $(this), var $t = $(this),
$o = $t.offset(); $o = $t.offset();
if(this !== i.element[0]) { if (this !== i.element[0]) {
i.snapElements.push({ i.snapElements.push({
item: this, item: this,
width: $t.outerWidth(), height: $t.outerHeight(), width: $t.outerWidth(), height: $t.outerHeight(),
@ -920,54 +917,54 @@ $.ui.plugin.add("draggable", "snap", {
b = t + inst.snapElements[i].height; b = t + inst.snapElements[i].height;
if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) { if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
if(inst.snapElements[i].snapping) { if (inst.snapElements[i].snapping) {
(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
} }
inst.snapElements[i].snapping = false; inst.snapElements[i].snapping = false;
continue; continue;
} }
if(o.snapMode !== "inner") { if (o.snapMode !== "inner") {
ts = Math.abs(t - y2) <= d; ts = Math.abs(t - y2) <= d;
bs = Math.abs(b - y1) <= d; bs = Math.abs(b - y1) <= d;
ls = Math.abs(l - x2) <= d; ls = Math.abs(l - x2) <= d;
rs = Math.abs(r - x1) <= d; rs = Math.abs(r - x1) <= d;
if(ts) { if (ts) {
ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top; ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
} }
if(bs) { if (bs) {
ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top; ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
} }
if(ls) { if (ls) {
ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left; ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
} }
if(rs) { if (rs) {
ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left; ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
} }
} }
first = (ts || bs || ls || rs); first = (ts || bs || ls || rs);
if(o.snapMode !== "outer") { if (o.snapMode !== "outer") {
ts = Math.abs(t - y1) <= d; ts = Math.abs(t - y1) <= d;
bs = Math.abs(b - y2) <= d; bs = Math.abs(b - y2) <= d;
ls = Math.abs(l - x1) <= d; ls = Math.abs(l - x1) <= d;
rs = Math.abs(r - x2) <= d; rs = Math.abs(r - x2) <= d;
if(ts) { if (ts) {
ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top; ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
} }
if(bs) { if (bs) {
ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top; ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
} }
if(ls) { if (ls) {
ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left; ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
} }
if(rs) { if (rs) {
ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left; ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
} }
} }
if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) { if (!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
} }
inst.snapElements[i].snapping = (ts || bs || ls || rs || first); inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
@ -1000,7 +997,7 @@ $.ui.plugin.add("draggable", "zIndex", {
var t = $( ui.helper ), var t = $( ui.helper ),
o = instance.options; o = instance.options;
if(t.css("zIndex")) { if (t.css("zIndex")) {
o._zIndex = t.css("zIndex"); o._zIndex = t.css("zIndex");
} }
t.css("zIndex", o.zIndex); t.css("zIndex", o.zIndex);
@ -1008,7 +1005,7 @@ $.ui.plugin.add("draggable", "zIndex", {
stop: function( event, ui, instance ) { stop: function( event, ui, instance ) {
var o = instance.options; var o = instance.options;
if(o._zIndex) { if (o._zIndex) {
$(ui.helper).css("zIndex", o._zIndex); $(ui.helper).css("zIndex", o._zIndex);
} }
} }