From a88d64514001867b908776e6bfcfac7f1011970d Mon Sep 17 00:00:00 2001 From: Mike Sherov Date: Tue, 2 Apr 2013 09:08:17 -0400 Subject: Draggable: Stop erroneously overriding scroll offsets for root nodes. Fixes #6258 - Draggable: not following mouse when scrolled and using overflow-y: scroll. --- tests/unit/draggable/draggable_core.js | 35 ++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'tests/unit/draggable') diff --git a/tests/unit/draggable/draggable_core.js b/tests/unit/draggable/draggable_core.js index f22d483a6..0d693e4ff 100644 --- a/tests/unit/draggable/draggable_core.js +++ b/tests/unit/draggable/draggable_core.js @@ -94,4 +94,39 @@ test( "#8269: Removing draggable element on drop", function() { }); }); +test( "#6258: not following mouse when scrolled and using overflow-y: scroll", function() { + expect( 2 ); + + var element = $( "#draggable1" ).draggable({ + stop: function( event, ui ) { + equal( ui.position.left, 1, "left position is correct despite overflow on HTML" ); + equal( ui.position.top, 1, "top position is correct despite overflow on HTML" ); + $( "html" ) + .css( "overflow-y", oldOverflowY ) + .css( "overflow-x", oldOverflowX ) + .scrollTop( 0 ) + .scrollLeft( 0 ); + } + }), + contentToForceScroll = $( "
" ).css({ + height: "10000px", + width: "10000px" + }), + oldOverflowY = $( "html" ).css( "overflow-y" ), + oldOverflowX = $( "html" ).css( "overflow-x" ); + + contentToForceScroll.appendTo( "#qunit-fixture" ); + $( "html" ) + .css( "overflow-y", "scroll" ) + .css( "overflow-x", "scroll" ) + .scrollTop( 300 ) + .scrollLeft( 300 ); + + element.simulate( "drag", { + dx: 1, + dy: 1, + moves: 1 + }); +}); + })( jQuery ); -- cgit v1.2.3 From 49c7b7200ef944ffc93487e79e763dfe97b4ff4a Mon Sep 17 00:00:00 2001 From: Mike Sherov Date: Wed, 3 Apr 2013 12:26:39 -0400 Subject: Draggable: Don't cache parent offset if the parent position is fixed. Fixes #5009 - Draggable: scroll not working with parent's position fixed --- tests/unit/draggable/draggable_core.js | 30 ++++++++++++++++++++++++++++++ ui/jquery.ui.draggable.js | 9 +++++++-- 2 files changed, 37 insertions(+), 2 deletions(-) (limited to 'tests/unit/draggable') diff --git a/tests/unit/draggable/draggable_core.js b/tests/unit/draggable/draggable_core.js index 0d693e4ff..9ef18c4b2 100644 --- a/tests/unit/draggable/draggable_core.js +++ b/tests/unit/draggable/draggable_core.js @@ -129,4 +129,34 @@ test( "#6258: not following mouse when scrolled and using overflow-y: scroll", f }); }); +test( "#5009: scroll not working with parent's position fixed", function() { + expect( 2 ); + + var startValue = 300, + element = $( "#draggable1" ).wrap( "
" ).draggable({ + drag: function() { + startValue += 100; + $( document ).scrollTop( startValue ).scrollLeft( startValue ); + }, + stop: function( event, ui ) { + equal( ui.position.left, 10, "left position is correct despite overflow on HTML" ); + equal( ui.position.top, 10, "top position is correct despite overflow on HTML" ); + $( document ).scrollTop( 0 ).scrollLeft( 0 ); + } + }), + contentToForceScroll = $( "
" ).css({ + height: "20000px", + width: "20000px" + }); + + $( "#qunit-fixture" ).append( contentToForceScroll ); + $( "#wrapper" ).css( "position", "fixed" ); + + element.simulate( "drag", { + dx: 10, + dy: 10, + moves: 3 + }); +}); + })( jQuery ); diff --git a/ui/jquery.ui.draggable.js b/ui/jquery.ui.draggable.js index 4814cb851..64cf339e0 100644 --- a/ui/jquery.ui.draggable.js +++ b/ui/jquery.ui.draggable.js @@ -125,8 +125,10 @@ $.widget("ui.draggable", $.ui.mouse, { this._cacheMargins(); //Store the helper's css position - this.cssPosition = this.helper.css("position"); + this.cssPosition = this.helper.css( "position" ); this.scrollParent = this.helper.scrollParent(); + this.offsetParent = this.helper.offsetParent(); + this.offsetParentCssPosition = this.offsetParent.css( "position" ); //The element's absolute position on the page minus margins this.offset = this.positionAbs = this.element.offset(); @@ -184,6 +186,10 @@ $.widget("ui.draggable", $.ui.mouse, { }, _mouseDrag: function(event, noPropagation) { + // reset any necessary cached properties (see #5009) + if ( this.offsetParentCssPosition === "fixed" ) { + this.offset.parent = this._getParentOffset(); + } //Compute the helpers position this.position = this._generatePosition(event); @@ -320,7 +326,6 @@ $.widget("ui.draggable", $.ui.mouse, { _getParentOffset: function() { //Get the offsetParent and cache its position - this.offsetParent = this.helper.offsetParent(); var po = this.offsetParent.offset(); // This is a special case where we need to modify a offset calculated on start, since the following happened: -- cgit v1.2.3 From 6a3bf605ba74ef891bdbe39e8f3d2a0ba6bf33c9 Mon Sep 17 00:00:00 2001 From: Mike Sherov Date: Sat, 6 Apr 2013 22:59:56 -0400 Subject: Draggable Tests: fix copypasta'd assertion messages. --- tests/unit/draggable/draggable_core.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'tests/unit/draggable') diff --git a/tests/unit/draggable/draggable_core.js b/tests/unit/draggable/draggable_core.js index 9ef18c4b2..88b9c3f23 100644 --- a/tests/unit/draggable/draggable_core.js +++ b/tests/unit/draggable/draggable_core.js @@ -139,8 +139,8 @@ test( "#5009: scroll not working with parent's position fixed", function() { $( document ).scrollTop( startValue ).scrollLeft( startValue ); }, stop: function( event, ui ) { - equal( ui.position.left, 10, "left position is correct despite overflow on HTML" ); - equal( ui.position.top, 10, "top position is correct despite overflow on HTML" ); + equal( ui.position.left, 10, "left position is correct when parent position is fixed" ); + equal( ui.position.top, 10, "top position is correct when parent position is fixed" ); $( document ).scrollTop( 0 ).scrollLeft( 0 ); } }), -- cgit v1.2.3 From 3c1a3ca252a24f63ab7f4ac819cc7744eaf57c77 Mon Sep 17 00:00:00 2001 From: Mike Sherov Date: Sun, 7 Apr 2013 12:10:59 -0400 Subject: Draggable Tests: fix old Safari and old Opera tests with jQuery < 1.8 tests by accounting for a bug in $.contains on disconnected Elements. --- tests/unit/draggable/draggable_options.js | 12 +++++++++--- tests/unit/draggable/draggable_test_helpers.js | 5 +++++ 2 files changed, 14 insertions(+), 3 deletions(-) (limited to 'tests/unit/draggable') diff --git a/tests/unit/draggable/draggable_options.js b/tests/unit/draggable/draggable_options.js index 6a0cd593b..635d318e7 100644 --- a/tests/unit/draggable/draggable_options.js +++ b/tests/unit/draggable/draggable_options.js @@ -1289,9 +1289,15 @@ test( "#8459: element can snap to an element that was removed during drag", func moves: 1 }); - // TODO: fix IE8 testswarm IFRAME positioning bug so closeEnough can be turned back to equal - closeEnough( element.offset().left, newX, 1, "doesn't snap to a removed element" ); - closeEnough( element.offset().top, newY, 1, "doesn't snap to a removed element" ); + // Support: Opera 12.10, Safari 5.1, jQuery <1.8 + if ( TestHelpers.draggable.unreliableContains ) { + ok( true, "Opera <12.14 and Safari <6.0 report wrong values for $.contains in jQuery < 1.8" ); + ok( true, "Opera <12.14 and Safari <6.0 report wrong values for $.contains in jQuery < 1.8" ); + } else { + // TODO: fix IE8 testswarm IFRAME positioning bug so closeEnough can be turned back to equal + closeEnough( element.offset().left, newX, 1, "doesn't snap to a removed element" ); + closeEnough( element.offset().top, newY, 1, "doesn't snap to a removed element" ); + } }); test( "#8165: Snapping large rectangles to small rectangles doesn't snap properly", function() { diff --git a/tests/unit/draggable/draggable_test_helpers.js b/tests/unit/draggable/draggable_test_helpers.js index 44e37c559..246175604 100644 --- a/tests/unit/draggable/draggable_test_helpers.js +++ b/tests/unit/draggable/draggable_test_helpers.js @@ -1,6 +1,11 @@ TestHelpers.draggable = { // todo: remove the unreliable offset hacks unreliableOffset: $.ui.ie && ( !document.documentMode || document.documentMode < 8 ) ? 2 : 0, + // Support: Opera 12.10, Safari 5.1, jQuery <1.8 + unreliableContains: function(){ + var element = $( "
" ); + return $.contains( element[ 0 ].ownerDocument, element[ 0 ] ); + }(), testDrag: function(el, handle, dx, dy, expectedDX, expectedDY, msg) { var offsetAfter, actual, expected, offsetBefore = el.offset(); -- cgit v1.2.3 From d4d9e14161d0f2cd64a441e4703c801b35fbc158 Mon Sep 17 00:00:00 2001 From: Mike Sherov Date: Sun, 7 Apr 2013 12:17:19 -0400 Subject: Draggable Tests: fix more old Safari and old Opera tests with jQuery < 1.8 tests by accounting for a bug in $.contains on disconnected Elements. --- tests/unit/draggable/draggable_core.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'tests/unit/draggable') diff --git a/tests/unit/draggable/draggable_core.js b/tests/unit/draggable/draggable_core.js index 88b9c3f23..53703843d 100644 --- a/tests/unit/draggable/draggable_core.js +++ b/tests/unit/draggable/draggable_core.js @@ -87,11 +87,16 @@ test( "#8269: Removing draggable element on drop", function() { } }); - element.simulate( "drag", { - handle: "corner", - x: dropOffset.left, - y: dropOffset.top - }); + // Support: Opera 12.10, Safari 5.1, jQuery <1.8 + if ( TestHelpers.draggable.unreliableContains ) { + ok( true, "Opera <12.14 and Safari <6.0 report wrong values for $.contains in jQuery < 1.8" ); + } else { + element.simulate( "drag", { + handle: "corner", + x: dropOffset.left, + y: dropOffset.top + }); + } }); test( "#6258: not following mouse when scrolled and using overflow-y: scroll", function() { -- cgit v1.2.3 From 58d9130ba3f7f6560582c41066ca0678c036d8e3 Mon Sep 17 00:00:00 2001 From: Mike Sherov Date: Sun, 7 Apr 2013 12:31:21 -0400 Subject: Draggable Tests: style guide conformance for TestHelpers --- tests/unit/draggable/draggable_test_helpers.js | 56 ++++++++++++-------------- 1 file changed, 26 insertions(+), 30 deletions(-) (limited to 'tests/unit/draggable') diff --git a/tests/unit/draggable/draggable_test_helpers.js b/tests/unit/draggable/draggable_test_helpers.js index 246175604..0263f694c 100644 --- a/tests/unit/draggable/draggable_test_helpers.js +++ b/tests/unit/draggable/draggable_test_helpers.js @@ -1,12 +1,12 @@ TestHelpers.draggable = { - // todo: remove the unreliable offset hacks + // TODO: remove the unreliable offset hacks unreliableOffset: $.ui.ie && ( !document.documentMode || document.documentMode < 8 ) ? 2 : 0, // Support: Opera 12.10, Safari 5.1, jQuery <1.8 unreliableContains: function(){ var element = $( "
" ); return $.contains( element[ 0 ].ownerDocument, element[ 0 ] ); }(), - testDrag: function(el, handle, dx, dy, expectedDX, expectedDY, msg) { + testDrag: function( el, handle, dx, dy, expectedDX, expectedDY, msg ) { var offsetAfter, actual, expected, offsetBefore = el.offset(); @@ -20,64 +20,60 @@ TestHelpers.draggable = { expected = { left: offsetBefore.left + expectedDX, top: offsetBefore.top + expectedDY }; msg = msg ? msg + "." : ""; - deepEqual(actual, expected, "dragged[" + dx + ", " + dy + "] " + msg); + deepEqual( actual, expected, "dragged[" + dx + ", " + dy + "] " + msg ); }, - shouldMove: function(el, why) { - TestHelpers.draggable.testDrag(el, el, 50, 50, 50, 50, why); + shouldMove: function( el, why ) { + TestHelpers.draggable.testDrag( el, el, 50, 50, 50, 50, why ); }, - shouldNotMove: function(el, why) { - TestHelpers.draggable.testDrag(el, el, 50, 50, 0, 0, why); + shouldNotMove: function( el, why ) { + TestHelpers.draggable.testDrag( el, el, 50, 50, 0, 0, why ); }, - testScroll: function(el, position ) { - var oldPosition = $("#main").css("position"); - $("#main").css("position", position); - TestHelpers.draggable.shouldMove(el, position+" parent"); - $("#main").css("position", oldPosition); + testScroll: function( el, position ) { + var oldPosition = $( "#main" ).css( "position" ); + $( "#main" ).css( "position", position); + TestHelpers.draggable.shouldMove( el, position + " parent" ); + $( "#main" ).css( "position", oldPosition ); }, restoreScroll: function( what ) { if( what ) { - $(document).scrollTop(0); $(document).scrollLeft(0); + $( document ).scrollTop( 0 ).scrollLeft( 0 ); } else { - $("#main").scrollTop(0); $("#main").scrollLeft(0); + $( "#main" ).scrollTop( 0 ).scrollLeft( 0 ); } }, setScroll: function( what ) { - if(what) { - // todo: currently, the draggable interaction doesn't properly account for scrolled pages, + if( what ) { + // TODO: currently, the draggable interaction doesn't properly account for scrolled pages, // uncomment the line below to make the tests fail that should when the page is scrolled - // $(document).scrollTop(100); $(document).scrollLeft(100); + // $( document ).scrollTop( 100 ).scrollLeft( 100 ); } else { - $("#main").scrollTop(100); $("#main").scrollLeft(100); + $( "#main" ).scrollTop( 100 ).scrollLeft( 100 ); } }, - border: function(el, side) { - return parseInt(el.css("border-" + side + "-width"), 10) || 0; + border: function( el, side ) { + return parseInt( el.css( "border-" + side + "-width" ), 10 ) || 0; }, - margin: function(el, side) { - return parseInt(el.css("margin-" + side), 10) || 0; + margin: function( el, side ) { + return parseInt( el.css( "margin-" + side ), 10 ) || 0; }, move: function( el, x, y ) { - $( el ).simulate( "drag", { dx: x, dy: y }); - }, trackMouseCss : function( el ) { el.bind( "drag", function() { - el.data( "last_dragged_cursor", $("body").css("cursor") ); + el.data( "last_dragged_cursor", $( "body" ).css( "cursor" ) ); }); }, trackAppendedParent : function( el ) { - - // appendTo ignored without being clone + // TODO: appendTo is currently ignored if helper is original (see #7044) el.draggable( "option", "helper", "clone" ); + // Get what parent is at time of drag el.bind( "drag", function(e,ui) { - // Get what parent is at time of drag - el.data( "last_dragged_parent", ui.helper.parent()[0] ); + el.data( "last_dragged_parent", ui.helper.parent()[ 0 ] ); }); - } }; \ No newline at end of file -- cgit v1.2.3 From d7ea0e5e519da8be0eed08a0db07f752114b752a Mon Sep 17 00:00:00 2001 From: Scott González Date: Mon, 8 Apr 2013 14:45:09 -0400 Subject: Draggable tests: Wrap IIFE in parens. --- tests/unit/draggable/draggable_test_helpers.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'tests/unit/draggable') diff --git a/tests/unit/draggable/draggable_test_helpers.js b/tests/unit/draggable/draggable_test_helpers.js index 0263f694c..b36505556 100644 --- a/tests/unit/draggable/draggable_test_helpers.js +++ b/tests/unit/draggable/draggable_test_helpers.js @@ -2,10 +2,10 @@ TestHelpers.draggable = { // TODO: remove the unreliable offset hacks unreliableOffset: $.ui.ie && ( !document.documentMode || document.documentMode < 8 ) ? 2 : 0, // Support: Opera 12.10, Safari 5.1, jQuery <1.8 - unreliableContains: function(){ + unreliableContains: (function(){ var element = $( "
" ); return $.contains( element[ 0 ].ownerDocument, element[ 0 ] ); - }(), + })(), testDrag: function( el, handle, dx, dy, expectedDX, expectedDY, msg ) { var offsetAfter, actual, expected, offsetBefore = el.offset(); -- cgit v1.2.3 From d345a0d7db841a143dcfdd3fb6fa6141cda435e9 Mon Sep 17 00:00:00 2001 From: Mike Sherov Date: Wed, 27 Mar 2013 16:47:57 -0400 Subject: Draggable: allow draggable to defer destroying itself upon DOM removal until after stop is fired. Fixes #6889 - Draggable: Cursor doesn't revert to pre-dragging state after revert action when original element is removed. --- tests/jquery.simulate.js | 8 +++- tests/unit/draggable/draggable_core.js | 8 +++- tests/unit/draggable/draggable_options.js | 27 +++++++++++ ui/jquery.ui.core.js | 9 +++- ui/jquery.ui.draggable.js | 79 +++++++++++++++++-------------- 5 files changed, 89 insertions(+), 42 deletions(-) (limited to 'tests/unit/draggable') diff --git a/tests/jquery.simulate.js b/tests/jquery.simulate.js index 6e2f3ba8e..0a0c42487 100644 --- a/tests/jquery.simulate.js +++ b/tests/jquery.simulate.js @@ -316,8 +316,12 @@ $.extend( $.simulate.prototype, { this.simulateEvent( document, "mousemove", coord ); } - this.simulateEvent( target, "mouseup", coord ); - this.simulateEvent( target, "click", coord ); + if ( $.contains( document, target ) ) { + this.simulateEvent( target, "mouseup", coord ); + this.simulateEvent( target, "click", coord ); + } else { + this.simulateEvent( document, "mouseup", coord ); + } } }); diff --git a/tests/unit/draggable/draggable_core.js b/tests/unit/draggable/draggable_core.js index 53703843d..dd71bd48b 100644 --- a/tests/unit/draggable/draggable_core.js +++ b/tests/unit/draggable/draggable_core.js @@ -75,9 +75,13 @@ test( "resizable handle with complex markup (#8756 / #8757)", function() { }); test( "#8269: Removing draggable element on drop", function() { - expect( 1 ); + expect( 2 ); - var element = $( "#draggable1" ).wrap( "
" ).draggable(), + var element = $( "#draggable1" ).wrap( "
" ).draggable({ + stop: function() { + ok( true, "stop still called despite element being removed from DOM on drop" ); + } + }), dropOffset = $( "#droppable" ).offset(); $( "#droppable" ).droppable({ diff --git a/tests/unit/draggable/draggable_options.js b/tests/unit/draggable/draggable_options.js index 635d318e7..c361318b1 100644 --- a/tests/unit/draggable/draggable_options.js +++ b/tests/unit/draggable/draggable_options.js @@ -451,6 +451,33 @@ test( "{ cursor: 'move' }", function() { equal( after, before, "after drag: cursor restored" ); }); +test( "#6889: Cursor doesn't revert to pre-dragging state after revert action when original element is removed", function() { + function getCursor() { + return $( "body" ).css( "cursor" ); + } + + expect( 2 ); + + var element = $( "#draggable1" ).wrap( "
" ).draggable({ + cursor: "move", + revert: true, + revertDuration: 0, + start: function() { + notEqual( getCursor(), expected, "start callback: cursor '" + expected + "'" ); + $( "#wrapper" ).remove(); + }, + stop: function() { + equal( getCursor(), expected, "after drag: cursor restored" ); + } + }), + expected = getCursor(); + + element.simulate( "drag", { + dx: -1, + dy: -1 + }); +}); + test( "cursor, default, switching after initialization", function() { expect( 3 ); diff --git a/ui/jquery.ui.core.js b/ui/jquery.ui.core.js index bbe5da333..f0d9e42ec 100644 --- a/ui/jquery.ui.core.js +++ b/ui/jquery.ui.core.js @@ -276,10 +276,15 @@ $.ui.plugin = { proto.plugins[ i ].push( [ option, set[ i ] ] ); } }, - call: function( instance, name, args ) { + call: function( instance, name, args, allowDisconnected ) { var i, set = instance.plugins[ name ]; - if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) { + + if ( !set ) { + return; + } + + if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) ) { return; } diff --git a/ui/jquery.ui.draggable.js b/ui/jquery.ui.draggable.js index 64cf339e0..45b724fde 100644 --- a/ui/jquery.ui.draggable.js +++ b/ui/jquery.ui.draggable.js @@ -66,6 +66,10 @@ $.widget("ui.draggable", $.ui.mouse, { }, _destroy: function() { + if ( ( this.helper || this.element ).is( ".ui-draggable-dragging" ) ) { + this.destroyOnClear = true; + return; + } this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" ); this._mouseDestroy(); }, @@ -233,11 +237,6 @@ $.widget("ui.draggable", $.ui.mouse, { this.dropped = false; } - //if the original element is no longer in the DOM don't bother to continue (see #8269) - if ( this.options.helper === "original" && !$.contains( this.element[ 0 ].ownerDocument, this.element[ 0 ] ) ) { - return 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))) { $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() { if(that._trigger("stop", event) !== false) { @@ -554,13 +553,16 @@ $.widget("ui.draggable", $.ui.mouse, { } this.helper = null; this.cancelHelperRemoval = false; + if ( this.destroyOnClear ) { + this.destroy(); + } }, // From now on bulk stuff - mainly helpers _trigger: function(type, event, ui) { ui = ui || this._uiHash(); - $.ui.plugin.call(this, type, [event, ui]); + $.ui.plugin.call( this, type, [ event, ui, this ], true ); //The absolute position has to be recalculated after plugins if(type === "drag") { this.positionAbs = this._convertPositionTo("absolute"); @@ -582,9 +584,9 @@ $.widget("ui.draggable", $.ui.mouse, { }); $.ui.plugin.add("draggable", "connectToSortable", { - start: function(event, ui) { + start: function( event, ui, inst ) { - var inst = $(this).draggable( "instance" ), o = inst.options, + var o = inst.options, uiSortable = $.extend({}, ui, { item: inst.element }); inst.sortables = []; $(o.connectToSortable).each(function() { @@ -600,11 +602,12 @@ $.ui.plugin.add("draggable", "connectToSortable", { }); }, - stop: function(event, ui) { + stop: function( event, ui, inst ) { //If we are still over the sortable, we fake the stop event of the sortable, but also remove helper - var inst = $(this).draggable( "instance" ), - uiSortable = $.extend({}, ui, { item: inst.element }); + var uiSortable = $.extend( {}, ui, { + item: inst.element + }); $.each(inst.sortables, function() { if(this.instance.isOver) { @@ -637,9 +640,9 @@ $.ui.plugin.add("draggable", "connectToSortable", { }); }, - drag: function(event, ui) { + drag: function( event, ui, inst ) { - var inst = $(this).draggable( "instance" ), that = this; + var that = this; $.each(inst.sortables, function() { @@ -739,15 +742,17 @@ $.ui.plugin.add("draggable", "connectToSortable", { }); $.ui.plugin.add("draggable", "cursor", { - start: function() { - var t = $("body"), o = $(this).draggable( "instance" ).options; + start: function( event, ui, instance ) { + var t = $( "body" ), + o = instance.options; + if (t.css("cursor")) { o._cursor = t.css("cursor"); } t.css("cursor", o.cursor); }, - stop: function() { - var o = $(this).draggable( "instance" ).options; + stop: function( event, ui, instance ) { + var o = instance.options; if (o._cursor) { $("body").css("cursor", o._cursor); } @@ -755,15 +760,16 @@ $.ui.plugin.add("draggable", "cursor", { }); $.ui.plugin.add("draggable", "opacity", { - start: function(event, ui) { - var t = $(ui.helper), o = $(this).draggable( "instance" ).options; + start: function( event, ui, instance ) { + var t = $( ui.helper ), + o = instance.options; if(t.css("opacity")) { o._opacity = t.css("opacity"); } t.css("opacity", o.opacity); }, - stop: function(event, ui) { - var o = $(this).draggable( "instance" ).options; + stop: function( event, ui, instance ) { + var o = instance.options; if(o._opacity) { $(ui.helper).css("opacity", o._opacity); } @@ -771,15 +777,15 @@ $.ui.plugin.add("draggable", "opacity", { }); $.ui.plugin.add("draggable", "scroll", { - start: function() { - var i = $(this).draggable( "instance" ); + start: function( event, ui, i ) { if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") { i.overflowOffset = i.scrollParent.offset(); } }, - drag: function( event ) { + drag: function( event, ui, i ) { - var i = $(this).draggable( "instance" ), o = i.options, scrolled = false; + var o = i.options, + scrolled = false; if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") { @@ -827,10 +833,9 @@ $.ui.plugin.add("draggable", "scroll", { }); $.ui.plugin.add("draggable", "snap", { - start: function() { + start: function( event, ui, i ) { - var i = $(this).draggable( "instance" ), - o = i.options; + var o = i.options; i.snapElements = []; @@ -847,10 +852,9 @@ $.ui.plugin.add("draggable", "snap", { }); }, - drag: function(event, ui) { + drag: function( event, ui, inst ) { var ts, bs, ls, rs, l, r, t, b, i, first, - inst = $(this).draggable( "instance" ), o = inst.options, d = o.snapTolerance, x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width, @@ -922,9 +926,9 @@ $.ui.plugin.add("draggable", "snap", { }); $.ui.plugin.add("draggable", "stack", { - start: function() { + start: function( event, ui, instance ) { var min, - o = $(this).draggable( "instance" ).options, + o = instance.options, group = $.makeArray($(o.stack)).sort(function(a,b) { return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0); }); @@ -940,15 +944,18 @@ $.ui.plugin.add("draggable", "stack", { }); $.ui.plugin.add("draggable", "zIndex", { - start: function(event, ui) { - var t = $(ui.helper), o = $(this).draggable( "instance" ).options; + start: function( event, ui, instance ) { + var t = $( ui.helper ), + o = instance.options; + if(t.css("zIndex")) { o._zIndex = t.css("zIndex"); } t.css("zIndex", o.zIndex); }, - stop: function(event, ui) { - var o = $(this).draggable( "instance" ).options; + stop: function( event, ui, instance ) { + var o = instance.options; + if(o._zIndex) { $(ui.helper).css("zIndex", o._zIndex); } -- cgit v1.2.3 From 7c939aadf8c661f1230627d51bf1450f99effcc3 Mon Sep 17 00:00:00 2001 From: Mike Sherov Date: Sun, 14 Apr 2013 12:58:42 -0400 Subject: Test Suite: Remove Flaky Datepicker test, and correct more old jQuery test cases for old Opera and old Safari. --- tests/unit/button/button_core.js | 2 +- tests/unit/datepicker/datepicker_options.js | 11 ++++++----- tests/unit/draggable/draggable_core.js | 1 + tests/unit/draggable/draggable_options.js | 13 +++++++++---- 4 files changed, 17 insertions(+), 10 deletions(-) (limited to 'tests/unit/draggable') diff --git a/tests/unit/button/button_core.js b/tests/unit/button/button_core.js index 55dda68b3..6df7da9db 100644 --- a/tests/unit/button/button_core.js +++ b/tests/unit/button/button_core.js @@ -166,7 +166,7 @@ asyncTest( "Resetting a button's form should refresh the visual state of the but ok( !checkbox.button( "widget" ).hasClass( "ui-state-active" ) ); form.get( 0 ).reset(); - + // #9213: If a button has been removed, refresh should not be called on it when // its corresponding form is reset. button.remove(); diff --git a/tests/unit/datepicker/datepicker_options.js b/tests/unit/datepicker/datepicker_options.js index a5d66314c..a763b2fda 100644 --- a/tests/unit/datepicker/datepicker_options.js +++ b/tests/unit/datepicker/datepicker_options.js @@ -1066,11 +1066,12 @@ test("formatDate", function() { "Format date 'jour' d 'de' MM (''DD''), yy with settings"); }); -test("Ticket 6827: formatDate day of year calculation is wrong during day lights savings time", function(){ - expect( 1 ); - var time = $.datepicker.formatDate("oo", new Date("2010/03/30 12:00:00 CDT")); - equal(time, "089"); -}); +// TODO: Fix this test so it isn't mysteriously flaky in Browserstack on certain OS/Browser combos +// test("Ticket 6827: formatDate day of year calculation is wrong during day lights savings time", function(){ +// expect( 1 ); +// var time = $.datepicker.formatDate("oo", new Date("2010/03/30 12:00:00 CDT")); +// equal(time, "089"); +// }); test( "Ticket 7602: Stop datepicker from appearing with beforeShow event handler", function() { expect( 3 ); diff --git a/tests/unit/draggable/draggable_core.js b/tests/unit/draggable/draggable_core.js index dd71bd48b..e7fcdfa87 100644 --- a/tests/unit/draggable/draggable_core.js +++ b/tests/unit/draggable/draggable_core.js @@ -94,6 +94,7 @@ test( "#8269: Removing draggable element on drop", function() { // Support: Opera 12.10, Safari 5.1, jQuery <1.8 if ( TestHelpers.draggable.unreliableContains ) { ok( true, "Opera <12.14 and Safari <6.0 report wrong values for $.contains in jQuery < 1.8" ); + ok( true, "Opera <12.14 and Safari <6.0 report wrong values for $.contains in jQuery < 1.8" ); } else { element.simulate( "drag", { handle: "corner", diff --git a/tests/unit/draggable/draggable_options.js b/tests/unit/draggable/draggable_options.js index c361318b1..ef551003d 100644 --- a/tests/unit/draggable/draggable_options.js +++ b/tests/unit/draggable/draggable_options.js @@ -472,10 +472,15 @@ test( "#6889: Cursor doesn't revert to pre-dragging state after revert action wh }), expected = getCursor(); - element.simulate( "drag", { - dx: -1, - dy: -1 - }); + if ( TestHelpers.draggable.unreliableContains ) { + ok( true, "Opera <12.14 and Safari <6.0 report wrong values for $.contains in jQuery < 1.8" ); + ok( true, "Opera <12.14 and Safari <6.0 report wrong values for $.contains in jQuery < 1.8" ); + } else { + element.simulate( "drag", { + dx: -1, + dy: -1 + }); + } }); test( "cursor, default, switching after initialization", function() { -- cgit v1.2.3