From f95bb86d861008bae269efe614a5beb99c377008 Mon Sep 17 00:00:00 2001
From: Raymond May Jr
Date: Thu, 9 Aug 2012 15:45:52 +0200
Subject: [PATCH 001/146] add scrollTop and scrollLeft to animate pass through
as they do not work in $++ animate when passed with a timing value
---
dom/animate/animate.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dom/animate/animate.js b/dom/animate/animate.js
index dd1b2602..361918a4 100644
--- a/dom/animate/animate.js
+++ b/dom/animate/animate.js
@@ -57,7 +57,7 @@ steal('jquery', 'jquery/dom/styles').then(function ($) {
// Negative values not handled the same
|| props[name] < 0
// unit-less value
- || name == 'zIndex' || name == 'z-index'
+ || name == 'zIndex' || name == 'z-index' || name == 'scrollTop' || name == 'scrollLeft'
) {
return true;
}
From 6514e13ed498759d54c1f61b54ee2edc7efe5f73 Mon Sep 17 00:00:00 2001
From: Jason Brumwell
Date: Sun, 12 Aug 2012 10:02:28 -0400
Subject: [PATCH 002/146] Added ability to stop propagation of the dropon event
---
event/drop/drop.js | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/event/drop/drop.js b/event/drop/drop.js
index 6d831397..eaa0d9b7 100644
--- a/event/drop/drop.js
+++ b/event/drop/drop.js
@@ -374,17 +374,22 @@ steal('jquery', 'jquery/event/drag', 'jquery/dom/within', 'jquery/dom/compare',
}
},
end: function( event, moveable ) {
- var responder, la,
- endName = this.lowerName+'end',
- dropData;
+ var la,
+ endName = this.lowerName+'end',
+ onEvent = $.Event(this.endName, event),
+ dropData;
// call dropon
// go through the actives ... if you are over one, call dropped on it
for(var i = 0; i < this.last_active.length; i++){
la = this.last_active[i]
if( this.isAffected(event.vector(), moveable, la) && la[this.endName]){
- la.callHandlers(this.endName, null, event, moveable);
+ la.callHandlers(this.endName, null, onEvent, moveable);
}
+
+ if (onEvent.isPropagationStopped()) {
+ break;
+ }
}
// call dropend
for(var r =0; r
Date: Sun, 12 Aug 2012 10:23:24 -0400
Subject: [PATCH 003/146] Added dragcleanup event
---
event/drag/drag.js | 30 +++++++++++++++++++++++-------
1 file changed, 23 insertions(+), 7 deletions(-)
diff --git a/event/drag/drag.js b/event/drag/drag.js
index 98a629f3..fca85d15 100644
--- a/event/drag/drag.js
+++ b/event/drag/drag.js
@@ -84,7 +84,8 @@ steal('jquery', 'jquery/lang/vector', 'jquery/event/livehack', 'jquery/event/rev
dragover: event.find(delegate, ["dragover"], selector),
dragmove: event.find(delegate, ["dragmove"], selector),
dragout: event.find(delegate, ["dragout"], selector),
- dragend: event.find(delegate, ["dragend"], selector)
+ dragend: event.find(delegate, ["dragend"], selector),
+ dragcleanup: event.find(delegate, ["dragcleanup"], selector),
},
destroyed: function() {
self.current = null;
@@ -404,7 +405,7 @@ steal('jquery', 'jquery/lang/vector', 'jquery/event/livehack', 'jquery/event/rev
});
}
else {
- this.cleanup();
+ this.cleanup(event);
}
this.event = null;
},
@@ -412,7 +413,7 @@ steal('jquery', 'jquery/lang/vector', 'jquery/event/livehack', 'jquery/event/rev
* Cleans up drag element after drag drop.
* @hide
*/
- cleanup: function() {
+ cleanup: function(event) {
this.movingElement.css({
zIndex: this.oldZIndex
});
@@ -427,6 +428,8 @@ steal('jquery', 'jquery/lang/vector', 'jquery/event/livehack', 'jquery/event/rev
// Remove the element when using drag.ghost()
this.movingElement.remove();
}
+
+ this.callEvents('cleanup', this.element, event);
this.movingElement = this.element = this.event = null;
},
@@ -713,17 +716,30 @@ steal('jquery', 'jquery/lang/vector', 'jquery/event/livehack', 'jquery/event/rev
* @attribute dragend
* @parent jQuery.event.drag
*
- * `dragend` is called when the drag motion is done.
+ * `dragend` is called when the drag operation is completed.
* The event handler gets an instance of [jQuery.Drag] passed as the second
* parameter.
*
* $('.draggable').on('dragend', function(ev, drag)
- * // Clean up when the drag motion is done
+ * // Calculation on whether revert should be invoked, alterations based on position of the end event
* });
*/
- 'dragend'], startEvent, function( e ) {
+ 'dragend',
+ /**
+ * @attribute dragcleanup
+ * @parent jQuery.event.drag
+ *
+ * `dragcleanup` is called after dragend and revert (if applied)
+ * The event handler gets an instance of [jQuery.Drag] passed as the second
+ * parameter.
+ *
+ * $('.draggable').on('dragcleanup', function(ev, drag)
+ * // cleanup
+ * });
+ */
+ 'dragcleanup'], startEvent, function( e ) {
$.Drag.mousedown.call($.Drag, e, this);
});
return $;
-});
+});
\ No newline at end of file
From f7b218172397b5ac8b0ed426df410b128522e374 Mon Sep 17 00:00:00 2001
From: Jason Brumwell
Date: Sun, 12 Aug 2012 14:07:24 -0400
Subject: [PATCH 004/146] namespace support for event.setuphelper
---
event/livehack/livehack.js | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/event/livehack/livehack.js b/event/livehack/livehack.js
index ed3300d1..d1397adc 100644
--- a/event/livehack/livehack.js
+++ b/event/livehack/livehack.js
@@ -124,18 +124,20 @@ steal('jquery', function($) {
startingEvent = null;
}
var add = function( handleObj ) {
-
- var bySelector, selector = handleObj.selector || "";
+ var bySelector,
+ selector = handleObj.selector || "",
+ namespace = handleObj.namespace ? '.'+handleObj.namespace : '';
+
if ( selector ) {
bySelector = event.find(this, types, selector);
if (!bySelector.length ) {
- $(this).delegate(selector, startingEvent, onFirst);
+ $(this).delegate(selector, startingEvent + namespace, onFirst);
}
}
else {
//var bySelector = event.find(this, types, selector);
if (!event.find(this, types, selector).length ) {
- event.add(this, startingEvent, onFirst, {
+ event.add(this, startingEvent + namespace, onFirst, {
selector: selector,
delegate: this
});
From aacda6840a2cf184705e852d6878843cc3c8c5d8 Mon Sep 17 00:00:00 2001
From: Austin McDaniel
Date: Mon, 13 Aug 2012 09:08:42 -0500
Subject: [PATCH 005/146] Reverse passes 'data' too.
Enhanced Reverse event to pass the data attribute like normal jQuery events do. Added tests for this enhancement too.
---
event/reverse/reverse.js | 4 ++--
event/reverse/reverse_test.js | 15 +++++++++++++++
2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/event/reverse/reverse.js b/event/reverse/reverse.js
index 0f38a9b1..46713218 100644
--- a/event/reverse/reverse.js
+++ b/event/reverse/reverse.js
@@ -40,7 +40,7 @@ steal('jquery', function( $ ) {
var where = data === false ? ev.target : this
// trigger all this element's handlers
- $.event.handle.call(where, ev);
+ $.event.handle.call(where, ev, data);
if ( ev.isPropagationStopped() ) {
count--;
return;
@@ -56,7 +56,7 @@ steal('jquery', function( $ ) {
while (++index < length && (child = bound[index]) && (isWindow || $.contains(where, child)) ) {
// call the event
- $.event.handle.call(child, ev);
+ $.event.handle.call(child, ev, data);
if ( ev.isPropagationStopped() ) {
// move index until the item is not in the current child
diff --git a/event/reverse/reverse_test.js b/event/reverse/reverse_test.js
index dccd0c87..df976dbd 100644
--- a/event/reverse/reverse_test.js
+++ b/event/reverse/reverse_test.js
@@ -36,4 +36,19 @@ steal('funcunit/qunit', 'jquery/event/move').then(function() {
$('#outer').trigger('test');
$('body').trigger('test');
});
+
+ test('passing data', 1, function() {
+ $('#qunit-test-area').html('' +
+ '
' +
+ '
Innermost div
' +
+ '
' +
+ '
');
+
+ $('#inner').on('test', function(ev, data) {
+ equals(data.data, true, 'data passed!');
+ });
+
+ $('#outer').trigger('test', { data: true });
+ //$('body').trigger('test');
+ });
});
\ No newline at end of file
From d9b8c3238ea81fc1bf33b3dd38d817521e11cdcf Mon Sep 17 00:00:00 2001
From: Austin McDaniel
Date: Tue, 14 Aug 2012 09:11:27 -0500
Subject: [PATCH 006/146] jQuery.Mousehold event addition
Mousehold is triggered when you hold down the mouse without releasing.
You can set delay and get the count of the current fire count.
---
event/mousehold/mousehold.js | 120 +++++++++++++++++++++++++++++++++++
1 file changed, 120 insertions(+)
create mode 100644 event/mousehold/mousehold.js
diff --git a/event/mousehold/mousehold.js b/event/mousehold/mousehold.js
new file mode 100644
index 00000000..326939b5
--- /dev/null
+++ b/event/mousehold/mousehold.js
@@ -0,0 +1,120 @@
+steal('jquery', 'jquery/event/livehack', function($) {
+
+/**
+ * @class jQuery.Mousehold
+ * @plugin jquery/event/mousehold
+ * @download http://jmvcsite.heroku.com/pluginify?plugins[]=jquery/event/mousehold/mousehold.js
+ * @parent jQuery.event.mousehold
+ *
+ * Creates a new mousehold. The constructor should not be called directly.
+ *
+ * An instance of `$.Mousehold` is passed as the second argument to each
+ * [jQuery.event.mousehold] event handler:
+ *
+ * $('#button').on("mousehold", function(ev, mousehold) {
+ * // Set the mousehold delay to 500ms
+ * mousehold.delay(500);
+ * });
+ */
+$.Mousehold = function(){
+ this._delay = $.Mousehold.delay;
+ this.fireCount = 0;
+};
+
+/**
+ * @Static
+ */
+$.extend($.Mousehold,{
+ /**
+ * @attribute delay
+ *
+ * `$.Mousehold.delay` is the delay (in milliseconds) after which the hold is
+ * activated by default.
+ *
+ * Set this value as a global default. The default is 100ms.
+ *
+ * // Set the global hover delay to 1 second
+ * $.Mousehold.delay = 1000;
+ */
+ delay: 500
+});
+
+/**
+ * @Prototype
+ */
+$.extend($.Mousehold.prototype,{
+ /**
+ * `mousehold.delay(time)` sets the delay (in ms) for this mousedown.
+ * This method should only be used in [jQuery.event.mousehold mousehold]:
+ *
+ * $('.holdable').on('mousehold', function(ev, mousehold) {
+ * // Set the delay to 500ms
+ * mousehold.delay(500);
+ * });
+ *
+ * @param {Number} delay the number of milliseconds used to determine a mousehold
+ * @return {$.Mousedown} The mousehold object
+ */
+ delay: function( delay ) {
+ this._delay = delay;
+ return this;
+ }
+});
+
+ var event = $.event,
+ onmousehold = function(ev) {
+
+ var mousehold = new $.Mousehold(),
+ fireStep = 0,
+ delegate = ev.delegateTarget || ev.currentTarget,
+ selector = ev.handleObj.selector,
+ downEl = this,
+ timeout;
+
+ var clearMousehold = function() {
+ clearInterval(timeout);
+
+ if (fireStep == 1) {
+ $.each(event.find(delegate, ["mousehold"], selector), function(){
+ mousehold.fireCount = 1;
+ this.call(downEl, ev, mousehold)
+ })
+ }
+
+ fireStep = 0;
+ $(downEl).unbind("mouseout", clearMousehold)
+ .unbind("mouseup", clearMousehold);
+ };
+
+ fireStep = 1;
+ timeout = setInterval(function() {
+ $.each(event.find(delegate, ["mousehold"], selector), function(){
+ mousehold.fireCount++;
+ this.call(downEl, ev, mousehold)
+ });
+
+ fireStep = 2;
+ }, mousehold.delay);
+
+ $(downEl).bind("mouseout", clearMousehold)
+ .bind("mouseup", clearMousehold);
+ };
+
+ /**
+ * @add jQuery.event.special
+ */
+// Attach events
+event.setupHelper([
+/**
+ * @attribute mousehold
+ * @parent jQuery.event.mousehold
+ *
+ * `mousehold` is called while the mouse is being held down.
+ *
+ * Additionally, the function, when executed, is passed a single
+ * argument representing the count of times the event has been fired during
+ * this session of the mouse hold.
+ */
+"mousehold" ], "mousedown", onmousehold );
+
+});
\ No newline at end of file
From c095cddc0d2ee6463c669ba0ad55d72530435b9a Mon Sep 17 00:00:00 2001
From: Austin McDaniel
Date: Tue, 14 Aug 2012 09:20:42 -0500
Subject: [PATCH 007/146] few doc updates for mousehold
---
event/mousehold/mousehold.js | 11 +++--------
1 file changed, 3 insertions(+), 8 deletions(-)
diff --git a/event/mousehold/mousehold.js b/event/mousehold/mousehold.js
index 326939b5..5346fc1b 100644
--- a/event/mousehold/mousehold.js
+++ b/event/mousehold/mousehold.js
@@ -31,7 +31,7 @@ $.extend($.Mousehold,{
* `$.Mousehold.delay` is the delay (in milliseconds) after which the hold is
* activated by default.
*
- * Set this value as a global default. The default is 100ms.
+ * Set this value as a global default. The default is 500ms.
*
* // Set the global hover delay to 1 second
* $.Mousehold.delay = 1000;
@@ -48,8 +48,8 @@ $.extend($.Mousehold.prototype,{
* This method should only be used in [jQuery.event.mousehold mousehold]:
*
* $('.holdable').on('mousehold', function(ev, mousehold) {
- * // Set the delay to 500ms
- * mousehold.delay(500);
+ * // Set the delay to 100ms
+ * mousehold.delay(100);
* });
*
* @param {Number} delay the number of milliseconds used to determine a mousehold
@@ -108,12 +108,7 @@ event.setupHelper([
/**
* @attribute mousehold
* @parent jQuery.event.mousehold
- *
* `mousehold` is called while the mouse is being held down.
- *
- * Additionally, the function, when executed, is passed a single
- * argument representing the count of times the event has been fired during
- * this session of the mouse hold.
*/
"mousehold" ], "mousedown", onmousehold );
From 538c41ac6fa235208e99833fd7e4133444c9e5a0 Mon Sep 17 00:00:00 2001
From: Austin McDaniel
Date: Tue, 14 Aug 2012 10:58:27 -0500
Subject: [PATCH 008/146] Changed 'mouseout' to 'mouseleave'. Changed
'setInterval' to 'setTimeout'.
---
event/mousehold/mousehold.js | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/event/mousehold/mousehold.js b/event/mousehold/mousehold.js
index 5346fc1b..e45ae935 100644
--- a/event/mousehold/mousehold.js
+++ b/event/mousehold/mousehold.js
@@ -12,8 +12,8 @@ steal('jquery', 'jquery/event/livehack', function($) {
* [jQuery.event.mousehold] event handler:
*
* $('#button').on("mousehold", function(ev, mousehold) {
- * // Set the mousehold delay to 500ms
- * mousehold.delay(500);
+ * // Set the mousehold delay to 100ms
+ * mousehold.delay(100);
* });
*/
$.Mousehold = function(){
@@ -82,21 +82,22 @@ $.extend($.Mousehold.prototype,{
}
fireStep = 0;
- $(downEl).unbind("mouseout", clearMousehold)
+ $(downEl).unbind("mouseleave", clearMousehold)
.unbind("mouseup", clearMousehold);
};
fireStep = 1;
- timeout = setInterval(function() {
+ timeout = setTimeout(function() {
$.each(event.find(delegate, ["mousehold"], selector), function(){
mousehold.fireCount++;
this.call(downEl, ev, mousehold)
});
fireStep = 2;
+ timeout = setTimeout(arguments.callee, mousehold.delay)
}, mousehold.delay);
- $(downEl).bind("mouseout", clearMousehold)
+ $(downEl).bind("mouseleave", clearMousehold)
.bind("mouseup", clearMousehold);
};
From bf6e971e4068cdfe85562e3c9189da048857b20c Mon Sep 17 00:00:00 2001
From: Austin McDaniel
Date: Mon, 20 Aug 2012 15:10:18 -0500
Subject: [PATCH 009/146] Added more docs and updating of offset to
jquery/event/mousehold
---
event/mousehold/mousehold.js | 45 ++++++++++++++++++++++++++++--------
1 file changed, 36 insertions(+), 9 deletions(-)
diff --git a/event/mousehold/mousehold.js b/event/mousehold/mousehold.js
index e45ae935..f47de750 100644
--- a/event/mousehold/mousehold.js
+++ b/event/mousehold/mousehold.js
@@ -36,7 +36,7 @@ $.extend($.Mousehold,{
* // Set the global hover delay to 1 second
* $.Mousehold.delay = 1000;
*/
- delay: 500
+ delay: 100
});
/**
@@ -68,10 +68,15 @@ $.extend($.Mousehold.prototype,{
fireStep = 0,
delegate = ev.delegateTarget || ev.currentTarget,
selector = ev.handleObj.selector,
- downEl = this,
+ downEl = $(this),
+ offsetY = 0,
+ offsetX = 0,
timeout;
- var clearMousehold = function() {
+ var updateCoordinates = function(ev){
+ offsetX = ev.offsetX;
+ offsetY = ev.offsetY;
+ }, clearMousehold = function() {
clearInterval(timeout);
if (fireStep == 1) {
@@ -82,23 +87,29 @@ $.extend($.Mousehold.prototype,{
}
fireStep = 0;
- $(downEl).unbind("mouseleave", clearMousehold)
- .unbind("mouseup", clearMousehold);
+ downEl.unbind("mouseleave", clearMousehold)
+ .unbind("mouseup", clearMousehold)
+ .unbind("mousemove", updateCoordinates);
};
fireStep = 1;
timeout = setTimeout(function() {
$.each(event.find(delegate, ["mousehold"], selector), function(){
mousehold.fireCount++;
+
+ ev.offsetX = offsetX || ev.offsetX;
+ ev.offsetY = offsetY || ev.offsetY;
+
this.call(downEl, ev, mousehold)
});
fireStep = 2;
- timeout = setTimeout(arguments.callee, mousehold.delay)
- }, mousehold.delay);
+ timeout = setTimeout(arguments.callee, mousehold._delay)
+ }, mousehold._delay);
- $(downEl).bind("mouseleave", clearMousehold)
- .bind("mouseup", clearMousehold);
+ downEl.bind("mouseleave", clearMousehold)
+ .bind("mouseup", clearMousehold)
+ .bind('mousemove', updateCoordinates)
};
/**
@@ -109,7 +120,23 @@ event.setupHelper([
/**
* @attribute mousehold
* @parent jQuery.event.mousehold
+ *
* `mousehold` is called while the mouse is being held down.
+ *
+ * This is different from `mousedown` in the fact that `mousedown`
+ * will only fire once no matter how long you hold down the mouse.
+ *
+ * For example, if you were to create a 'button' and hold
+ * down the button, 'mousehold' would fire until you release
+ * your cursor.
+ *
+ * Optionally, can set the delay between the event triggering.
+ * The `mousehold` class will contain the current delay and
+ * the number of times the event has fired.
+ *
+ * The `mousehold` event also updates the `offsetX` and `offsetY`
+ * of the event since this would be for the original event mouse offset.
+ *
*/
"mousehold" ], "mousedown", onmousehold );
From 248d74d0d7cef64b33d06c9d40039f3f78450489 Mon Sep 17 00:00:00 2001
From: Austin McDaniel
Date: Mon, 20 Aug 2012 16:22:56 -0500
Subject: [PATCH 010/146] A little bit of cleanup and setting target too in
mousehold
---
event/mousehold/mousehold.js | 13 ++++---------
1 file changed, 4 insertions(+), 9 deletions(-)
diff --git a/event/mousehold/mousehold.js b/event/mousehold/mousehold.js
index f47de750..d5df9de6 100644
--- a/event/mousehold/mousehold.js
+++ b/event/mousehold/mousehold.js
@@ -69,13 +69,12 @@ $.extend($.Mousehold.prototype,{
delegate = ev.delegateTarget || ev.currentTarget,
selector = ev.handleObj.selector,
downEl = $(this),
- offsetY = 0,
- offsetX = 0,
timeout;
- var updateCoordinates = function(ev){
- offsetX = ev.offsetX;
- offsetY = ev.offsetY;
+ var updateCoordinates = function(event){
+ ev.offsetX = event.offsetX;
+ ev.offsetY = event.offsetY;
+ ev.target = event.target;
}, clearMousehold = function() {
clearInterval(timeout);
@@ -96,10 +95,6 @@ $.extend($.Mousehold.prototype,{
timeout = setTimeout(function() {
$.each(event.find(delegate, ["mousehold"], selector), function(){
mousehold.fireCount++;
-
- ev.offsetX = offsetX || ev.offsetX;
- ev.offsetY = offsetY || ev.offsetY;
-
this.call(downEl, ev, mousehold)
});
From 16655c6e5252d8c0020731b796499a04cdbeafca Mon Sep 17 00:00:00 2001
From: David Luecke
Date: Mon, 27 Aug 2012 12:58:52 -0600
Subject: [PATCH 011/146] JQuery++ tests with latest Steal
---
.../view/test/qunit/controller_view_test.js | 2 +-
dom/animate/animate.js | 15 ++++++++-------
dom/form_params/form_params_test.js | 4 ++--
dom/styles/styles_test.js | 2 +-
event/default/default_pause_test.js | 2 +-
event/destroyed/destroyed_test.js | 2 +-
6 files changed, 14 insertions(+), 13 deletions(-)
diff --git a/controller/view/test/qunit/controller_view_test.js b/controller/view/test/qunit/controller_view_test.js
index 1628f84d..15b04274 100644
--- a/controller/view/test/qunit/controller_view_test.js
+++ b/controller/view/test/qunit/controller_view_test.js
@@ -1,4 +1,4 @@
-steal('jquery', 'jquery/controller/view','jquery/view/micro','funcunit/qunit', function($) {
+steal('jquery/controller/view','jquery/view/micro','funcunit/qunit', function() {
module("jquery/controller/view");
diff --git a/dom/animate/animate.js b/dom/animate/animate.js
index dd1b2602..d0500a6b 100644
--- a/dom/animate/animate.js
+++ b/dom/animate/animate.js
@@ -250,7 +250,12 @@ steal('jquery', 'jquery/dom/styles').then(function ($) {
}
$.removeData(self, dataKey, true);
- }
+ },
+ finisAnimation = function() {
+ // Call animationEnd using the passed properties
+ animationEnd(props, true);
+ done();
+ };
for(prop in props) {
properties.push(prop);
@@ -288,7 +293,7 @@ steal('jquery', 'jquery/dom/styles').then(function ($) {
'animation-play-state' : 'paused'
}));
// Unbind the animation end handler
- self.off(getBrowser().transitionEnd, animationEnd);
+ self.off(getBrowser().transitionEnd, finisAnimation());
if(!gotoEnd) {
// We were told not to finish the animation
// Call animationEnd but set the CSS to the current computed style
@@ -308,11 +313,7 @@ steal('jquery', 'jquery/dom/styles').then(function ($) {
}));
// Attach the transition end event handler to run only once
- self.one(getBrowser().transitionEnd, function() {
- // Call animationEnd using the passed properties
- animationEnd(props, true);
- done();
- });
+ self.one(getBrowser().transitionEnd, finishAnimation);
});
diff --git a/dom/form_params/form_params_test.js b/dom/form_params/form_params_test.js
index b515afd4..03e5340f 100644
--- a/dom/form_params/form_params_test.js
+++ b/dom/form_params/form_params_test.js
@@ -1,5 +1,5 @@
-steal("jquery", "jquery/dom/form_params", 'funcunit/qunit', 'jquery/view/micro',
-function($) {
+steal("jquery/dom/form_params", 'funcunit/qunit', 'jquery/view/micro',
+function() {
$.ajaxSetup({
cache : false
diff --git a/dom/styles/styles_test.js b/dom/styles/styles_test.js
index 683f483c..77bb27cc 100644
--- a/dom/styles/styles_test.js
+++ b/dom/styles/styles_test.js
@@ -1,4 +1,4 @@
-steal("jquery", "jquery/dom/dimensions",'jquery/view/micro', 'funcunit/qunit', function($) {
+steal("jquery/dom/dimensions",'jquery/view/micro', 'funcunit/qunit', function() {
module("jquery/dom/styles");
diff --git a/event/default/default_pause_test.js b/event/default/default_pause_test.js
index 41cc79cf..1cd6d94d 100644
--- a/event/default/default_pause_test.js
+++ b/event/default/default_pause_test.js
@@ -1,4 +1,4 @@
-steal('jquery', 'funcunit/qunit','jquery/event/default','jquery/event/pause', function($) {
+steal('funcunit/qunit','jquery/event/default','jquery/event/pause', function() {
module("jquery/event/default_pause");
diff --git a/event/destroyed/destroyed_test.js b/event/destroyed/destroyed_test.js
index c8bc43a0..4dd264a4 100644
--- a/event/destroyed/destroyed_test.js
+++ b/event/destroyed/destroyed_test.js
@@ -1,4 +1,4 @@
-steal("jquery", "jquery/event/destroyed", 'funcunit/qunit', function($) {
+steal("jquery/event/destroyed", 'funcunit/qunit', function() {
module("jquery/event/destroyed")
test("removing an element", function(){
From 11630bb25c4d2b8e9e47605ef1e73b4f3c99171d Mon Sep 17 00:00:00 2001
From: David Luecke
Date: Mon, 27 Aug 2012 13:41:44 -0600
Subject: [PATCH 012/146] Changelog
---
changelog.md | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
create mode 100644 changelog.md
diff --git a/changelog.md b/changelog.md
new file mode 100644
index 00000000..ad0d4173
--- /dev/null
+++ b/changelog.md
@@ -0,0 +1,24 @@
+### Change Log
+
+__1.0.0__
+
+- fix: [pass through scrollTop in animate](https://github.com/jupiterjs/jquerypp/pull/40)
+
+__1.0 Beta 2__
+
+- feature: [Key mapping tool for jQuery.event.key for international characters](https://github.com/jupiterjs/jquerypp/issues/16)
+- fix: [jQuery.formParams converts disabled fields](https://github.com/jupiterjs/jquerypp/issues/24)
+- fix: [jQuery.animate supports all parameters](https://github.com/jupiterjs/jquerypp/issues/22)
+- change: [jQuery.event.drag supports touch events](https://github.com/jupiterjs/jquerypp/issues/23)
+- fix: [jQuery.animate .stop() doesn't work](https://github.com/jupiterjs/jquerypp/issues/19)
+- fix: [Bug with duplicate sub keys](https://github.com/jupiterjs/jquerypp/issues/17)
+- change: [Added width property to jQuery.selection](https://github.com/jupiterjs/jquerypp/pull/11)
+- fix: [Security error in jQuery.animate](https://github.com/jupiterjs/jquerypp/issues/5)
+- *jquerypp.com*
+ - jsFiddle examples for [cookie](#cookie), [compare](#compare), [range](#range), [styles](#styles) and [key](#key)
+ - Links to annotated sources ([e.g. jQuery.animate](http://donejs.com/jquery/docs/jquery.animate.html))
+ - Changelog and list of heroes section
+
+__1.0 Beta__ (June 1st 2012)
+
+- Released!
\ No newline at end of file
From c94b4aaef2f1a0338cdff2e697af6ea769bb3316 Mon Sep 17 00:00:00 2001
From: David Luecke
Date: Mon, 27 Aug 2012 13:42:24 -0600
Subject: [PATCH 013/146] dragcleanup event tests and tweaks
---
event/drag/drag.js | 8 +++++---
event/drag/drag_test.js | 8 +++++++-
2 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/event/drag/drag.js b/event/drag/drag.js
index fca85d15..771a17aa 100644
--- a/event/drag/drag.js
+++ b/event/drag/drag.js
@@ -85,7 +85,7 @@ steal('jquery', 'jquery/lang/vector', 'jquery/event/livehack', 'jquery/event/rev
dragmove: event.find(delegate, ["dragmove"], selector),
dragout: event.find(delegate, ["dragout"], selector),
dragend: event.find(delegate, ["dragend"], selector),
- dragcleanup: event.find(delegate, ["dragcleanup"], selector),
+ dragcleanup: event.find(delegate, ["dragcleanup"], selector)
},
destroyed: function() {
self.current = null;
@@ -428,8 +428,10 @@ steal('jquery', 'jquery/lang/vector', 'jquery/event/livehack', 'jquery/event/rev
// Remove the element when using drag.ghost()
this.movingElement.remove();
}
-
- this.callEvents('cleanup', this.element, event);
+
+ if(event) {
+ this.callEvents('cleanup', this.element, event);
+ }
this.movingElement = this.element = this.event = null;
},
diff --git a/event/drag/drag_test.js b/event/drag/drag_test.js
index a2545f1f..a622d42b 100644
--- a/event/drag/drag_test.js
+++ b/event/drag/drag_test.js
@@ -62,6 +62,10 @@ test("dragging an element", function(){
.live("dragout", function(){
drags.dragout = true;
})
+ .live("dragcleanup", function() {
+ drags.dragcleanup = true;
+ })
+
$('#drop')
.live("dropinit", function(){
drops.dropinit = true;
@@ -89,6 +93,7 @@ test("dragging an element", function(){
ok(drags.draginit, "draginit fired correctly")
ok(drags.dragmove, "dragmove fired correctly")
ok(drags.dragend, "dragend fired correctly")
+ ok(drags.dragcleanup, "dragcleanup fired correctly")
ok(!drags.dragover,"dragover not fired yet")
ok(!drags.dragout, "dragout not fired yet")
//console.log(drags, drags.dragout)
@@ -104,7 +109,8 @@ test("dragging an element", function(){
ok(drops.dropmove, "dropmove fired correctly")
ok(drops.dropon, "dropon fired correctly")
}).drag({to: "#midpoint"}, function(){
- ok(drags.dragout, "dragout fired correctly")
+ ok(drags.dragout, "dragout fired correctly")
+ ok(drags.dragcleanup, "dragcleanup fired correctly")
ok(drops.dropout, "dropout fired correctly")
//div.remove();
From 41b66d2c615749e7aaed14117764087bfd175246 Mon Sep 17 00:00:00 2001
From: David Luecke
Date: Mon, 27 Aug 2012 14:18:32 -0600
Subject: [PATCH 014/146] Changelog update, animate bugfix
---
changelog.md | 1 +
dom/animate/animate.js | 4 ++--
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/changelog.md b/changelog.md
index ad0d4173..ff64bfb8 100644
--- a/changelog.md
+++ b/changelog.md
@@ -3,6 +3,7 @@
__1.0.0__
- fix: [pass through scrollTop in animate](https://github.com/jupiterjs/jquerypp/pull/40)
+- feature: [dragcleanup event](https://github.com/jupiterjs/jquerypp/pull/43)
__1.0 Beta 2__
diff --git a/dom/animate/animate.js b/dom/animate/animate.js
index bd584781..a1505ed5 100644
--- a/dom/animate/animate.js
+++ b/dom/animate/animate.js
@@ -251,7 +251,7 @@ steal('jquery', 'jquery/dom/styles').then(function ($) {
$.removeData(self, dataKey, true);
},
- finisAnimation = function() {
+ finishAnimation = function() {
// Call animationEnd using the passed properties
animationEnd(props, true);
done();
@@ -293,7 +293,7 @@ steal('jquery', 'jquery/dom/styles').then(function ($) {
'animation-play-state' : 'paused'
}));
// Unbind the animation end handler
- self.off(getBrowser().transitionEnd, finisAnimation());
+ self.off(getBrowser().transitionEnd, finishAnimation);
if(!gotoEnd) {
// We were told not to finish the animation
// Call animationEnd but set the CSS to the current computed style
From 34f1c67b5da9586765b8f2935e9ab0463b393696 Mon Sep 17 00:00:00 2001
From: David Luecke
Date: Tue, 28 Aug 2012 16:01:58 -0600
Subject: [PATCH 015/146] Always return when original event is undefined.
Closes #45
---
event/fastfix/fastfix.js | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/event/fastfix/fastfix.js b/event/fastfix/fastfix.js
index 2f2703a5..3707b497 100644
--- a/event/fastfix/fastfix.js
+++ b/event/fastfix/fastfix.js
@@ -19,12 +19,20 @@ steal('jquery', function ($) {
// special converters
special = {
pageX : function (original) {
+ if(!original) {
+ return;
+ }
+
var eventDoc = this.target.ownerDocument || document;
doc = eventDoc.documentElement;
body = eventDoc.body;
return original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
},
pageY : function (original) {
+ if(!original) {
+ return;
+ }
+
var eventDoc = this.target.ownerDocument || document;
doc = eventDoc.documentElement;
body = eventDoc.body;
@@ -34,12 +42,20 @@ steal('jquery', function ($) {
if(!original) {
return;
}
+
return original.fromElement === this.target ? original.toElement : original.fromElement;
},
metaKey : function (originalEvent) {
+ if(!originalEvent) {
+ return;
+ }
return originalEvent.ctrlKey;
},
which : function (original) {
+ if(!original) {
+ return;
+ }
+
return original.charCode != null ? original.charCode : original.keyCode;
}
};
From cf3ea630aed4607c9cdd6284ca4c3808c4259e39 Mon Sep 17 00:00:00 2001
From: David Luecke
Date: Wed, 29 Aug 2012 09:12:37 -0600
Subject: [PATCH 016/146] Animate test, close #28
---
dom/animate/animate.html | 12 +++---------
1 file changed, 3 insertions(+), 9 deletions(-)
diff --git a/dom/animate/animate.html b/dom/animate/animate.html
index e3af0314..27655466 100644
--- a/dom/animate/animate.html
+++ b/dom/animate/animate.html
@@ -22,19 +22,13 @@
From ac3be904e7f0b5d1f7e344a97f5fc0661abbf548 Mon Sep 17 00:00:00 2001
From: David Luecke
Date: Wed, 29 Aug 2012 10:26:36 -0600
Subject: [PATCH 017/146] Updating changelog, fix IE range error, closes #39
---
changelog.md | 12 +++++++++---
dom/range/range.js | 2 +-
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/changelog.md b/changelog.md
index ff64bfb8..40e47d6e 100644
--- a/changelog.md
+++ b/changelog.md
@@ -2,19 +2,25 @@
__1.0.0__
-- fix: [pass through scrollTop in animate](https://github.com/jupiterjs/jquerypp/pull/40)
- feature: [dragcleanup event](https://github.com/jupiterjs/jquerypp/pull/43)
+- feature: [Reverse and move event](https://github.com/jupiterjs/jquerypp/issues/25)
+- fix: [pass through scrollTop in animate](https://github.com/jupiterjs/jquerypp/pull/40)
+- fix: [Fastfix: Original can be undefined](https://github.com/jupiterjs/jquerypp/pull/45)
+- fix: [Animate Scroll not working](https://github.com/jupiterjs/jquerypp/issues/35)
+- fix: [.stop() does not stop callbacks from being executed](https://github.com/jupiterjs/jquerypp/issues/28)
+- fix: [jQuery.event.swipe.max isn't actually being used](https://github.com/jupiterjs/jquerypp/issues/33)
+- fix: [Range triggers error on IE8](https://github.com/jupiterjs/jquerypp/issues/39)
__1.0 Beta 2__
- feature: [Key mapping tool for jQuery.event.key for international characters](https://github.com/jupiterjs/jquerypp/issues/16)
- fix: [jQuery.formParams converts disabled fields](https://github.com/jupiterjs/jquerypp/issues/24)
- fix: [jQuery.animate supports all parameters](https://github.com/jupiterjs/jquerypp/issues/22)
-- change: [jQuery.event.drag supports touch events](https://github.com/jupiterjs/jquerypp/issues/23)
- fix: [jQuery.animate .stop() doesn't work](https://github.com/jupiterjs/jquerypp/issues/19)
- fix: [Bug with duplicate sub keys](https://github.com/jupiterjs/jquerypp/issues/17)
-- change: [Added width property to jQuery.selection](https://github.com/jupiterjs/jquerypp/pull/11)
- fix: [Security error in jQuery.animate](https://github.com/jupiterjs/jquerypp/issues/5)
+- change: [jQuery.event.drag supports touch events](https://github.com/jupiterjs/jquerypp/issues/23)
+- change: [Added width property to jQuery.selection](https://github.com/jupiterjs/jquerypp/pull/11)
- *jquerypp.com*
- jsFiddle examples for [cookie](#cookie), [compare](#compare), [range](#range), [styles](#styles) and [key](#key)
- Links to annotated sources ([e.g. jQuery.animate](http://donejs.com/jquery/docs/jquery.animate.html))
diff --git a/dom/range/range.js b/dom/range/range.js
index ba96c298..b888946e 100644
--- a/dom/range/range.js
+++ b/dom/range/range.js
@@ -74,7 +74,7 @@ steal('jquery', 'jquery/dom/compare', function ($) {
this.win = getWindow(range)
if (this.win.document.createRange) {
this.range = this.win.document.createRange()
- } else {
+ } else if(this.win && this.win.document.body && this.win.document.body.createTextRange) {
this.range = this.win.document.body.createTextRange()
}
// if we have an element, make the range select it
From 4aba7e974c2175cece9fae3a9740d657bb919f70 Mon Sep 17 00:00:00 2001
From: Noah Sloan
Date: Fri, 31 Aug 2012 22:47:14 -0500
Subject: [PATCH 018/146] controls not controllers
---
controller/controller.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/controller/controller.js b/controller/controller.js
index 0b834de0..1eec010a 100644
--- a/controller/controller.js
+++ b/controller/controller.js
@@ -1,5 +1,5 @@
steal('jquery', 'can/control', 'jquery/class','can/control/plugin',function($, Control) {
$.Controller = Control;
$.fn.controller = $.fn.control;
- $.fn.controllers = $.fn.controllers;
+ $.fn.controllers = $.fn.controls;
});
From fabf75cbc958a464ae9898d32544eaedbac830bf Mon Sep 17 00:00:00 2001
From: Noah Sloan
Date: Fri, 31 Aug 2012 22:50:37 -0500
Subject: [PATCH 019/146] restore model getters
---
model/model.js | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/model/model.js b/model/model.js
index 9c5efbbf..d62481d0 100644
--- a/model/model.js
+++ b/model/model.js
@@ -2,4 +2,9 @@
steal('jquery', 'can/util', 'can/model','can/observe/attributes','can/observe/setter','can/model/elements', function($, can){
$.Model = can.Model;
+ var get = $.Model.prototype.__get;
+ $.Model.prototype.__get = function(attr) {
+ var getter = attr && ("get" + can.classize(attr));
+ return typeof this[getter] === 'function' ? this[getter]() : get.apply(this,arguments);
+ };
});
From e5d311c15c9dd0f94430dac6daad669e21887236 Mon Sep 17 00:00:00 2001
From: Noah Sloan
Date: Fri, 31 Aug 2012 22:51:02 -0500
Subject: [PATCH 020/146] restore list.get(model(s))
---
model/model.js | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/model/model.js b/model/model.js
index d62481d0..0dbe746a 100644
--- a/model/model.js
+++ b/model/model.js
@@ -7,4 +7,19 @@ steal('jquery', 'can/util', 'can/model','can/observe/attributes','can/observe/se
var getter = attr && ("get" + can.classize(attr));
return typeof this[getter] === 'function' ? this[getter]() : get.apply(this,arguments);
};
+ // List.get used to take a model or list of models
+ var getList = $.Model.List.prototype.get;
+ $.Model.List.prototype.get = function(arg) {
+ var ids;
+ if(arg instanceof $.Model.List) {
+ ids = [];
+ $.each(arg,function() {
+ ids.push(this.attr('id'));
+ });
+ arg = ids;
+ } else if(arg.attr && arg.attr('id')) {
+ arg = arg.attr('id');
+ }
+ return getList.apply(this,arguments);
+ };
});
From d1a065b31f77375c64f199e6b130ae11ec85bd51 Mon Sep 17 00:00:00 2001
From: Noah Sloan
Date: Fri, 31 Aug 2012 22:51:45 -0500
Subject: [PATCH 021/146] restore list.push(anotherList)
---
model/model.js | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/model/model.js b/model/model.js
index 0dbe746a..94f8fc7c 100644
--- a/model/model.js
+++ b/model/model.js
@@ -22,4 +22,12 @@ steal('jquery', 'can/util', 'can/model','can/observe/attributes','can/observe/se
}
return getList.apply(this,arguments);
};
+ // restore the ability to push a list!arg
+ var push = $.Model.List.prototype.push;
+ $.Model.List.prototype.push = function(arg) {
+ if(arg instanceof $.Model.List) {
+ arg = can.makeArray(arg);
+ }
+ return push.apply(this,arguments);
+ };
});
From 3ffb54f6f45e6a7ba4d7e5a8fccc4f6e68bc17de Mon Sep 17 00:00:00 2001
From: Noah Sloan
Date: Fri, 31 Aug 2012 22:47:46 -0500
Subject: [PATCH 022/146] restore $.Controller.find
---
controller/controller.js | 3 +++
1 file changed, 3 insertions(+)
diff --git a/controller/controller.js b/controller/controller.js
index 1eec010a..e46dc12a 100644
--- a/controller/controller.js
+++ b/controller/controller.js
@@ -2,4 +2,7 @@ steal('jquery', 'can/control', 'jquery/class','can/control/plugin',function($, C
$.Controller = Control;
$.fn.controller = $.fn.control;
$.fn.controllers = $.fn.controls;
+ can.Control.prototype.find = can.Control.prototype.find || function(s) {
+ return this.element.find(s);
+ };
});
From 5b242064db933be13aa79d832cf9e08a6b283a85 Mon Sep 17 00:00:00 2001
From: Noah Sloan
Date: Fri, 31 Aug 2012 22:48:08 -0500
Subject: [PATCH 023/146] restore Controller.bind and delegate
---
controller/controller.js | 2 ++
1 file changed, 2 insertions(+)
diff --git a/controller/controller.js b/controller/controller.js
index e46dc12a..cd0e96b7 100644
--- a/controller/controller.js
+++ b/controller/controller.js
@@ -5,4 +5,6 @@ steal('jquery', 'can/control', 'jquery/class','can/control/plugin',function($, C
can.Control.prototype.find = can.Control.prototype.find || function(s) {
return this.element.find(s);
};
+ $.Controller.prototype.bind = $.Controller.prototype.on;
+ $.Controller.prototype.delegate = $.Controller.prototype.on;
});
From f53a1069e458a669f89112164d16f0de6cb74155 Mon Sep 17 00:00:00 2001
From: Noah Sloan
Date: Fri, 31 Aug 2012 22:52:01 -0500
Subject: [PATCH 024/146] restore model.update
---
model/model.js | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/model/model.js b/model/model.js
index 94f8fc7c..e57626d7 100644
--- a/model/model.js
+++ b/model/model.js
@@ -30,4 +30,10 @@ steal('jquery', 'can/util', 'can/model','can/observe/attributes','can/observe/se
}
return push.apply(this,arguments);
};
+
+ $.Model.prototype.update = function( attrs, success, error ) {
+ steal.dev.log('$.Model.update is deprecated. You can use attr + save instead.');
+ this.attr(attrs);
+ return this.save(success, error);
+ };
});
From d3e5148ab6e3b8e52dbc5b76216631bf9d5f2aa6 Mon Sep 17 00:00:00 2001
From: Justin Meyer
Date: Tue, 4 Sep 2012 15:35:34 -0500
Subject: [PATCH 025/146] doesn't break jQuery 1.8's dimensions. related to #50
---
dom/dimensions/dimensions.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dom/dimensions/dimensions.js b/dom/dimensions/dimensions.js
index a752bec6..ad2db757 100644
--- a/dom/dimensions/dimensions.js
+++ b/dom/dimensions/dimensions.js
@@ -153,7 +153,7 @@ height:
return this;
} else {
// Return the old value
- return first ? checks["oldOuter" + Upper].call(this, v) : null;
+ return first ? checks["oldOuter" + Upper].apply(this, arguments) : null;
}
}
$.fn["inner" + Upper] = function(v) {
From 0c9ecd0a09045632d3741d7b578a8e272447ec2b Mon Sep 17 00:00:00 2001
From: Austin McDaniel
Date: Wed, 5 Sep 2012 08:57:10 -0500
Subject: [PATCH 026/146] Fix for jQuery 1.8.1 data updates
---
model/list/list_test.js | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/model/list/list_test.js b/model/list/list_test.js
index 15a29800..9391f0a3 100644
--- a/model/list/list_test.js
+++ b/model/list/list_test.js
@@ -173,11 +173,15 @@ test("events - add", 4, function(){
// check that we are listening to updates on person ...
- ok( $(person).data("events"), "person has events" );
+ // events are hooked internally now
+ // ok( $(person).data("events"), "person has events" );
+ ok(jQuery._data(person, 'events'), "person has events" );
list.pop()
- ok( !$(person).data("events"), "person has no events" );
+ // events are hooked internally now
+ // ok( !$(person).data("events"), "person has no events" );
+ ok( !jQuery._data(person, 'events'), "person has no events" );
});
From c883b95b4ed214c00d5794ed55801a445554b6e1 Mon Sep 17 00:00:00 2001
From: Noah Sloan
Date: Wed, 5 Sep 2012 11:31:34 -0500
Subject: [PATCH 027/146] move $.Model.List fixes ion the right plugin
---
model/list/list.js | 26 +++++++++++++++++++++++++-
model/model.js | 23 -----------------------
2 files changed, 25 insertions(+), 24 deletions(-)
diff --git a/model/list/list.js b/model/list/list.js
index 8a634b44..7aa4be5d 100644
--- a/model/list/list.js
+++ b/model/list/list.js
@@ -1 +1,25 @@
-steal('can/model/list','jquery/model');
\ No newline at end of file
+steal('can/model/list','jquery/model').then(function() {
+ // List.get used to take a model or list of models
+ var getList = $.Model.List.prototype.get;
+ $.Model.List.prototype.get = function(arg) {
+ var ids;
+ if(arg instanceof $.Model.List) {
+ ids = [];
+ $.each(arg,function() {
+ ids.push(this.attr('id'));
+ });
+ arg = ids;
+ } else if(arg.attr && arg.attr('id')) {
+ arg = arg.attr('id');
+ }
+ return getList.apply(this,arguments);
+ };
+ // restore the ability to push a list!arg
+ var push = $.Model.List.prototype.push;
+ $.Model.List.prototype.push = function(arg) {
+ if(arg instanceof $.Model.List) {
+ arg = can.makeArray(arg);
+ }
+ return push.apply(this,arguments);
+ };
+});
diff --git a/model/model.js b/model/model.js
index e57626d7..72e2dc70 100644
--- a/model/model.js
+++ b/model/model.js
@@ -7,29 +7,6 @@ steal('jquery', 'can/util', 'can/model','can/observe/attributes','can/observe/se
var getter = attr && ("get" + can.classize(attr));
return typeof this[getter] === 'function' ? this[getter]() : get.apply(this,arguments);
};
- // List.get used to take a model or list of models
- var getList = $.Model.List.prototype.get;
- $.Model.List.prototype.get = function(arg) {
- var ids;
- if(arg instanceof $.Model.List) {
- ids = [];
- $.each(arg,function() {
- ids.push(this.attr('id'));
- });
- arg = ids;
- } else if(arg.attr && arg.attr('id')) {
- arg = arg.attr('id');
- }
- return getList.apply(this,arguments);
- };
- // restore the ability to push a list!arg
- var push = $.Model.List.prototype.push;
- $.Model.List.prototype.push = function(arg) {
- if(arg instanceof $.Model.List) {
- arg = can.makeArray(arg);
- }
- return push.apply(this,arguments);
- };
$.Model.prototype.update = function( attrs, success, error ) {
steal.dev.log('$.Model.update is deprecated. You can use attr + save instead.');
From 001d1f491a789278132055db39281d2024b584af Mon Sep 17 00:00:00 2001
From: Noah Sloan
Date: Fri, 7 Sep 2012 09:33:48 -0500
Subject: [PATCH 028/146] use the configured id of a model - fixes
list.get(model)
---
model/list/list.js | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/model/list/list.js b/model/list/list.js
index 7aa4be5d..8a3ed8c2 100644
--- a/model/list/list.js
+++ b/model/list/list.js
@@ -2,15 +2,15 @@ steal('can/model/list','jquery/model').then(function() {
// List.get used to take a model or list of models
var getList = $.Model.List.prototype.get;
$.Model.List.prototype.get = function(arg) {
- var ids;
+ var ids, id;
if(arg instanceof $.Model.List) {
ids = [];
$.each(arg,function() {
ids.push(this.attr('id'));
});
arg = ids;
- } else if(arg.attr && arg.attr('id')) {
- arg = arg.attr('id');
+ } else if(arg.attr && arg.constructor && (id = arg.attr(arg.constructor.id))) {
+ arg = id;
}
return getList.apply(this,arguments);
};
From d1bb1de19ae0f20506046cd4b029af74f908fd12 Mon Sep 17 00:00:00 2001
From: Austin McDaniel
Date: Tue, 11 Sep 2012 13:43:37 -0500
Subject: [PATCH 029/146] all .then(function must be removed if getting args
---
lang/vector/vector.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lang/vector/vector.js b/lang/vector/vector.js
index 441556af..1e6165f4 100644
--- a/lang/vector/vector.js
+++ b/lang/vector/vector.js
@@ -1,4 +1,4 @@
-steal('jquery').then(function($){
+steal('jquery', function($){
var getSetZero = function(v){ return v !== undefined ? (this.array[0] = v) : this.array[0] },
getSetOne = function(v){ return v !== undefined ? (this.array[1] = v) : this.array[1]};
From 1b5c8c25bfcf89f4a305a5238421e8329ee4877e Mon Sep 17 00:00:00 2001
From: David Luecke
Date: Tue, 11 Sep 2012 13:02:07 -0600
Subject: [PATCH 030/146] Removing more .then
---
event/move/move.js | 2 +-
event/resize/resize.js | 2 +-
event/reverse/reverse.js | 4 ++--
lang/observe/observe.js | 2 +-
lang/string/string.js | 2 +-
5 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/event/move/move.js b/event/move/move.js
index 8fa9f2b6..2e14113b 100644
--- a/event/move/move.js
+++ b/event/move/move.js
@@ -1,4 +1,4 @@
-steal('jquery', 'jquery/event/reverse').then(function( $ ) {
+steal('jquery', 'jquery/event/reverse').then(function() {
$.event.reverse('move');
return $;
});
\ No newline at end of file
diff --git a/event/resize/resize.js b/event/resize/resize.js
index 86f61448..2e486ed3 100644
--- a/event/resize/resize.js
+++ b/event/resize/resize.js
@@ -1,4 +1,4 @@
-steal('jquery', 'jquery/event/reverse').then(function( $ ) {
+steal('jquery/event/reverse', function() {
var
// bind on the window window resizes to happen
win = $(window),
diff --git a/event/reverse/reverse.js b/event/reverse/reverse.js
index 46713218..3cc800fd 100644
--- a/event/reverse/reverse.js
+++ b/event/reverse/reverse.js
@@ -1,4 +1,4 @@
-steal('jquery', function( $ ) {
+steal('jquery', function() {
$.event.reverse = function(name, attributes) {
var bound = $(),
count = 0;
@@ -87,4 +87,4 @@ steal('jquery', function( $ ) {
}
return $;
-})
\ No newline at end of file
+})
diff --git a/lang/observe/observe.js b/lang/observe/observe.js
index c9028b62..36b79355 100644
--- a/lang/observe/observe.js
+++ b/lang/observe/observe.js
@@ -1,3 +1,3 @@
-steal('jquery', 'can/util','can/observe').then(function($, can) {
+steal('can/util', 'jquery', 'can/observe', function(can) {
$.Observe = can.Observe;
});
diff --git a/lang/string/string.js b/lang/string/string.js
index e29fb807..4cdda42b 100644
--- a/lang/string/string.js
+++ b/lang/string/string.js
@@ -36,7 +36,7 @@
* Used for vector math.
*/
//string helpers
-steal('jquery').then(function( $ ) {
+steal('jquery').then(function() {
// Several of the methods in this plugin use code adapated from Prototype
// Prototype JavaScript framework, version 1.6.0.1
// (c) 2005-2007 Sam Stephenson
From 414383d2b2cd7af1074951d220c519f0f0ed43ef Mon Sep 17 00:00:00 2001
From: David Luecke
Date: Wed, 12 Sep 2012 08:51:42 -0600
Subject: [PATCH 031/146] Dimensions feature detection and tests, closes #50
---
dom/dimensions/dimensions.js | 54 +++++++++++++++++--------------
dom/dimensions/dimensions_test.js | 29 +++++++++++++----
dom/dimensions/styles.micro | 3 ++
3 files changed, 55 insertions(+), 31 deletions(-)
create mode 100644 dom/dimensions/styles.micro
diff --git a/dom/dimensions/dimensions.js b/dom/dimensions/dimensions.js
index ad2db757..c793af57 100644
--- a/dom/dimensions/dimensions.js
+++ b/dom/dimensions/dimensions.js
@@ -1,5 +1,5 @@
-steal('jquery', 'jquery/dom/styles', function($) {
+steal('jquery', 'jquery/dom/styles', function() {
var
//margin is inside border
@@ -12,7 +12,8 @@ var
oldOuterWidth: $.fn.outerWidth,
oldInnerWidth: $.fn.innerWidth,
oldInnerHeight: $.fn.innerHeight
- };
+ },
+ supportsSetter = $.fn.jquery >= '1.8.0';
$.each({
@@ -145,33 +146,36 @@ height:
}
//getter / setter
- $.fn["outer" + Upper] = function(v, margin) {
- var first = this[0];
- if (typeof v == 'number') {
- // Setting the value
- first && this[lower](v - getBoxes[lower](first, {padding: true, border: true, margin: margin}))
- return this;
- } else {
- // Return the old value
- return first ? checks["oldOuter" + Upper].apply(this, arguments) : null;
- }
- }
- $.fn["inner" + Upper] = function(v) {
- var first = this[0];
- if (typeof v == 'number') {
- // Setting the value
- first&& this[lower](v - getBoxes[lower](first, { padding: true }))
- return this;
- } else {
- // Return the old value
- return first ? checks["oldInner" + Upper].call(this, v) : null;
- }
- }
+ if(!supportsSetter) {
+ $.fn["outer" + Upper] = function(v, margin) {
+ var first = this[0];
+ if (typeof v == 'number') {
+ // Setting the value
+ first && this[lower](v - getBoxes[lower](first, {padding: true, border: true, margin: margin}))
+ return this;
+ } else {
+ // Return the old value
+ return first ? checks["oldOuter" + Upper].apply(this, arguments) : null;
+ }
+ }
+ $.fn["inner" + Upper] = function(v) {
+ var first = this[0];
+ if (typeof v == 'number') {
+ // Setting the value
+ first&& this[lower](v - getBoxes[lower](first, { padding: true }))
+ return this;
+ } else {
+ // Return the old value
+ return first ? checks["oldInner" + Upper].apply(this, arguments) : null;
+ }
+ }
+ }
+
//provides animations
var animate = function(boxes){
// Return the animation function
return function(fx){
- if (fx.state == 0) {
+ if (fx[supportsSetter ? 'pos' : 'state'] == 0) {
fx.start = $(fx.elem)[lower]();
fx.end = fx.end - getBoxes[lower](fx.elem,boxes);
}
diff --git a/dom/dimensions/dimensions_test.js b/dom/dimensions/dimensions_test.js
index 15cb7f0e..41db0fcd 100644
--- a/dom/dimensions/dimensions_test.js
+++ b/dom/dimensions/dimensions_test.js
@@ -1,11 +1,28 @@
steal("jquery/dom/dimensions",
- 'jquery/view/micro',
- 'funcunit/qunit').then(function(){
+ 'jquery/view/micro',
+ 'funcunit/qunit').then(function () {
-module("jquery/dom/dimensions");
+ module("jquery/dom/dimensions");
-test("outerHeight and width",function(){
- $("#qunit-test-area").html("//jquery/dom/dimensions/test/styles.micro",{})
-})
+ test("outerHeight and width", function () {
+ $("#qunit-test-area").html("//jquery/dom/dimensions/styles.micro", {});
+ var div = $("#qunit-test-area div"),
+ baseHeight = div.height();
+ equals(div.outerHeight(), baseHeight + 4, 'outerHeight() is adding border width');
+ equals(div.outerHeight(true), baseHeight + 4 + 10, 'outerHeight(true) is adding border width and margins');
+ div.outerHeight(50, true);
+ equals(div.height(), 50 - 4 - 10, 'Div height set as expected');
+ });
+
+ test("animate", function () {
+ $("#qunit-test-area").html("//jquery/dom/dimensions/styles.micro", {});
+ var div = $("#qunit-test-area div");
+ stop();
+ div.animate({ outerHeight : 50 }, 100, function() {
+ div.outerHeight(50, true);
+ equals(div.height(), 50 - 4 - 10, 'Div height animated as expected');
+ start();
+ });
+ });
});
\ No newline at end of file
diff --git a/dom/dimensions/styles.micro b/dom/dimensions/styles.micro
new file mode 100644
index 00000000..7c7503ca
--- /dev/null
+++ b/dom/dimensions/styles.micro
@@ -0,0 +1,3 @@
+
+Here is some content;
+
\ No newline at end of file
From d2acb77484f312b5b92c3ee01f8e080bf69fb092 Mon Sep 17 00:00:00 2001
From: David Luecke
Date: Wed, 12 Sep 2012 10:00:15 -0600
Subject: [PATCH 032/146] Removing more steal.then, updating changelog, tests
passing with jQuery 1.8.1
---
changelog.md | 1 +
dom/dimensions/test/outer.micro | 0
dom/dimensions/test/styles.micro | 3 ---
event/move/move.js | 2 +-
lang/string/deparam/deparam.js | 2 +-
lang/string/rsplit/rsplit.js | 2 +-
lang/string/string.js | 2 +-
7 files changed, 5 insertions(+), 7 deletions(-)
delete mode 100644 dom/dimensions/test/outer.micro
delete mode 100644 dom/dimensions/test/styles.micro
diff --git a/changelog.md b/changelog.md
index 40e47d6e..d4bb21c8 100644
--- a/changelog.md
+++ b/changelog.md
@@ -4,6 +4,7 @@ __1.0.0__
- feature: [dragcleanup event](https://github.com/jupiterjs/jquerypp/pull/43)
- feature: [Reverse and move event](https://github.com/jupiterjs/jquerypp/issues/25)
+- feature: jQuery 1.8.0 compatibility
- fix: [pass through scrollTop in animate](https://github.com/jupiterjs/jquerypp/pull/40)
- fix: [Fastfix: Original can be undefined](https://github.com/jupiterjs/jquerypp/pull/45)
- fix: [Animate Scroll not working](https://github.com/jupiterjs/jquerypp/issues/35)
diff --git a/dom/dimensions/test/outer.micro b/dom/dimensions/test/outer.micro
deleted file mode 100644
index e69de29b..00000000
diff --git a/dom/dimensions/test/styles.micro b/dom/dimensions/test/styles.micro
deleted file mode 100644
index 7c7503ca..00000000
--- a/dom/dimensions/test/styles.micro
+++ /dev/null
@@ -1,3 +0,0 @@
-
-Here is some content;
-
\ No newline at end of file
diff --git a/event/move/move.js b/event/move/move.js
index 2e14113b..f85e7136 100644
--- a/event/move/move.js
+++ b/event/move/move.js
@@ -1,4 +1,4 @@
-steal('jquery', 'jquery/event/reverse').then(function() {
+steal('jquery', 'jquery/event/reverse', function() {
$.event.reverse('move');
return $;
});
\ No newline at end of file
diff --git a/lang/string/deparam/deparam.js b/lang/string/deparam/deparam.js
index 0f9dd0bd..e490730c 100644
--- a/lang/string/deparam/deparam.js
+++ b/lang/string/deparam/deparam.js
@@ -1,4 +1,4 @@
-steal('jquery', function($){
+steal('jquery', function() {
var digitTest = /^\d+$/,
keyBreaker = /([^\[\]]+)|(\[\])/g,
diff --git a/lang/string/rsplit/rsplit.js b/lang/string/rsplit/rsplit.js
index 8b60bc7c..865a8b56 100644
--- a/lang/string/rsplit/rsplit.js
+++ b/lang/string/rsplit/rsplit.js
@@ -1,4 +1,4 @@
-steal('jquery/lang/string',function( $ ) {
+steal('jquery/lang/string', function() {
/**
* @add jQuery.String
*/
diff --git a/lang/string/string.js b/lang/string/string.js
index 4cdda42b..35dd2ab4 100644
--- a/lang/string/string.js
+++ b/lang/string/string.js
@@ -36,7 +36,7 @@
* Used for vector math.
*/
//string helpers
-steal('jquery').then(function() {
+steal('jquery', function() {
// Several of the methods in this plugin use code adapated from Prototype
// Prototype JavaScript framework, version 1.6.0.1
// (c) 2005-2007 Sam Stephenson
From 4aad411e3095951d2550d417e506e3d2067ac196 Mon Sep 17 00:00:00 2001
From: David Luecke
Date: Fri, 14 Sep 2012 09:34:54 -0600
Subject: [PATCH 033/146] Animation chaining with easing works, closes #37
---
dom/animate/animate.html | 33 +-
dom/animate/animate.js | 4 +-
dom/animate/animate_test.js | 2621 +++++++++++++++++++++--------------
dom/animate/qunit.html | 387 +++---
4 files changed, 1818 insertions(+), 1227 deletions(-)
diff --git a/dom/animate/animate.html b/dom/animate/animate.html
index 27655466..d6d2e460 100644
--- a/dom/animate/animate.html
+++ b/dom/animate/animate.html
@@ -1,16 +1,16 @@
-
- Animate Demo
-
-
-
+
+ Animate Demo
+
+
+
» Run
@@ -21,16 +21,11 @@
src='../../../steal/steal.js'>
\ No newline at end of file
diff --git a/dom/animate/animate.js b/dom/animate/animate.js
index a1505ed5..e33d26c1 100644
--- a/dom/animate/animate.js
+++ b/dom/animate/animate.js
@@ -1,4 +1,4 @@
-steal('jquery', 'jquery/dom/styles').then(function ($) {
+steal('jquery', 'jquery/dom/styles', function () {
// Overwrites `jQuery.fn.animate` to use CSS 3 animations if possible
@@ -244,7 +244,7 @@ steal('jquery', 'jquery/dom/styles').then(function ($) {
}));
// Call the original callback
- if (optall.old && exec) {
+ if ($.isFunction(optall.old) && exec) {
// Call success, pass the DOM element as the this reference
optall.old.call(self[0], true)
}
diff --git a/dom/animate/animate_test.js b/dom/animate/animate_test.js
index 5f8009d1..c8294360 100644
--- a/dom/animate/animate_test.js
+++ b/dom/animate/animate_test.js
@@ -2,1250 +2,1833 @@ steal('jquery', 'jquery/dom/animate', 'funcunit/qunit', 'qunit.css', function ($
module("jquery/dom/animate");
- test("sanity check", function () {
- expect(1);
- ok(jQuery("#dl:visible, #qunit-fixture:visible, #foo:visible").length === 3, "QUnit state is correct for testing effects");
- });
+ if ( jQuery.fx ) {
+ test("sanity check", function() {
+ expect(1);
+ ok( jQuery("#dl:visible, #qunit-fixture:visible, #foo:visible").length === 3, "QUnit state is correct for testing effects" );
+ });
- test("show()", function () {
- expect(28);
+ test("show()", function() {
+ expect(26);
- var hiddendiv = jQuery("div.hidden");
+ var hiddendiv = jQuery("div.hidden");
- hiddendiv.hide().show();
+ hiddendiv.hide().show();
- equal(hiddendiv.css("display"), "block", "Make sure a pre-hidden div is visible.");
+ equal( hiddendiv.css("display"), "block", "Make sure a pre-hidden div is visible." );
- var div = jQuery("
").hide().appendTo("#qunit-fixture").show();
+ var div = jQuery("
").hide().appendTo("#qunit-fixture").show();
- equal(div.css("display"), "block", "Make sure pre-hidden divs show");
+ equal( div.css("display"), "block", "Make sure pre-hidden divs show" );
- QUnit.reset();
+ QUnit.reset();
- hiddendiv = jQuery("div.hidden");
+ hiddendiv = jQuery("div.hidden");
- equal(jQuery.css(hiddendiv[0], "display"), "none", "hiddendiv is display: none");
+ equal(jQuery.css( hiddendiv[0], "display"), "none", "hiddendiv is display: none");
- hiddendiv.css("display", "block");
- equal(jQuery.css(hiddendiv[0], "display"), "block", "hiddendiv is display: block");
+ hiddendiv.css("display", "block");
+ equal(jQuery.css( hiddendiv[0], "display"), "block", "hiddendiv is display: block");
- hiddendiv.show();
- equal(jQuery.css(hiddendiv[0], "display"), "block", "hiddendiv is display: block");
+ hiddendiv.show();
+ equal(jQuery.css( hiddendiv[0], "display"), "block", "hiddendiv is display: block");
- hiddendiv.css("display", "");
+ hiddendiv.css("display","");
- var pass = true;
- div = jQuery("#qunit-fixture div");
- div.show().each(function () {
- if (this.style.display == "none") pass = false;
- });
- ok(pass, "Show");
+ var pass = true;
+ div = jQuery("#qunit-fixture div");
+ div.show().each(function(){
+ if ( this.style.display == "none" ) {
+ pass = false;
+ }
+ });
+ ok( pass, "Show" );
- var speeds = {
- "null speed" : null,
- "undefined speed" : undefined,
- "empty string speed" : "",
- "false speed" : false
- };
+ var speeds = {
+ "null speed": null,
+ "undefined speed": undefined,
+ "false speed": false
+ };
- jQuery.each(speeds, function (name, speed) {
- pass = true;
- div.hide().show(speed).each(function () {
- if (this.style.display == "none") pass = false;
+ jQuery.each(speeds, function(name, speed) {
+ pass = true;
+ div.hide().show(speed).each(function() {
+ if ( this.style.display == "none" ) {
+ pass = false;
+ }
+ });
+ ok( pass, "Show with " + name);
});
- ok(pass, "Show with " + name);
- });
- jQuery.each(speeds, function (name, speed) {
- pass = true;
- div.hide().show(speed, function () {
- pass = false;
+ jQuery.each(speeds, function(name, speed) {
+ pass = true;
+ div.hide().show(speed, function() {
+ pass = false;
+ });
+ ok( pass, "Show with " + name + " does not call animate callback" );
});
- ok(pass, "Show with " + name + " does not call animate callback");
- });
-
- // #show-tests * is set display: none in CSS
- jQuery("#qunit-fixture").append("
");
-
- var old = jQuery("#test-table").show().css("display") !== "table";
- jQuery("#test-table").remove();
-
- var test = {
- "div" : "block",
- "p" : "block",
- "a" : "inline",
- "code" : "inline",
- "pre" : "block",
- "span" : "inline",
- "table" : old ? "block" : "table",
- "thead" : old ? "block" : "table-header-group",
- "tbody" : old ? "block" : "table-row-group",
- "tr" : old ? "block" : "table-row",
- "th" : old ? "block" : "table-cell",
- "td" : old ? "block" : "table-cell",
- "ul" : "block",
- "li" : old ? "block" : "list-item"
- };
- jQuery.each(test, function (selector, expected) {
- var elem = jQuery(selector, "#show-tests").show();
- equal(elem.css("display"), expected, "Show using correct display type for " + selector);
- });
-
- // Make sure that showing or hiding a text node doesn't cause an error
- jQuery("
test
text
test ").show().remove();
- jQuery("
test
text
test ").hide().remove();
- });
-
- test("show(Number) - other displays", function () {
- expect(15);
- QUnit.reset();
- stop();
-
- // #show-tests * is set display: none in CSS
- jQuery("#qunit-fixture").append("
");
-
- var old = jQuery("#test-table").show().css("display") !== "table",
- num = 0;
- jQuery("#test-table").remove();
-
- var test = {
- "div" : "block",
- "p" : "block",
- "a" : "inline",
- "code" : "inline",
- "pre" : "block",
- "span" : "inline",
- "table" : old ? "block" : "table",
- "thead" : old ? "block" : "table-header-group",
- "tbody" : old ? "block" : "table-row-group",
- "tr" : old ? "block" : "table-row",
- "th" : old ? "block" : "table-cell",
- "td" : old ? "block" : "table-cell",
- "ul" : "block",
- "li" : old ? "block" : "list-item"
- };
+ // #show-tests * is set display: none in CSS
+ jQuery("#qunit-fixture").append("
");
+
+ var old = jQuery("#test-table").show().css("display") !== "table";
+ jQuery("#test-table").remove();
+
+ var test = {
+ "div" : "block",
+ "p" : "block",
+ "a" : "inline",
+ "code" : "inline",
+ "pre" : "block",
+ "span" : "inline",
+ "table" : old ? "block" : "table",
+ "thead" : old ? "block" : "table-header-group",
+ "tbody" : old ? "block" : "table-row-group",
+ "tr" : old ? "block" : "table-row",
+ "th" : old ? "block" : "table-cell",
+ "td" : old ? "block" : "table-cell",
+ "ul" : "block",
+ "li" : old ? "block" : "list-item"
+ };
- jQuery.each(test, function (selector, expected) {
- var elem = jQuery(selector, "#show-tests").show(1, function () {
- equal(elem.css("display"), expected, "Show using correct display type for " + selector);
- if (++num === 15) {
- start();
- }
+ jQuery.each(test, function(selector, expected) {
+ var elem = jQuery(selector, "#show-tests").show();
+ equal( elem.css("display"), expected, "Show using correct display type for " + selector );
});
- });
- });
+ jQuery("#show-tests").remove();
-// Supports #7397
- test("Persist correct display value", function () {
- expect(3);
- QUnit.reset();
- stop();
-
- // #show-tests * is set display: none in CSS
- jQuery("#qunit-fixture").append("
foo
");
-
- var $span = jQuery("#show-tests span"),
- displayNone = $span.css("display"),
- display = "", num = 0;
-
- $span.show();
+ // Make sure that showing or hiding a text node doesn't cause an error
+ jQuery("
test
text
test ").show().remove();
+ jQuery("
test
text
test ").hide().remove();
+ });
- display = $span.css("display");
+ test("show(Number) - other displays", function() {
+ expect(15);
+ QUnit.reset();
+ stop();
- $span.hide();
+ // #show-tests * is set display: none in CSS
+ jQuery("#qunit-fixture").append("
");
+
+ var old = jQuery("#test-table").show().css("display") !== "table",
+ num = 0;
+ jQuery("#test-table").remove();
+
+ var test = {
+ "div" : "block",
+ "p" : "block",
+ "a" : "inline",
+ "code" : "inline",
+ "pre" : "block",
+ "span" : "inline",
+ "table" : old ? "block" : "table",
+ "thead" : old ? "block" : "table-header-group",
+ "tbody" : old ? "block" : "table-row-group",
+ "tr" : old ? "block" : "table-row",
+ "th" : old ? "block" : "table-cell",
+ "td" : old ? "block" : "table-cell",
+ "ul" : "block",
+ "li" : old ? "block" : "list-item"
+ };
- $span.fadeIn(100, function () {
- equal($span.css("display"), display, "Expecting display: " + display);
- $span.fadeOut(100, function () {
- equal($span.css("display"), displayNone, "Expecting display: " + displayNone);
- $span.fadeIn(100, function () {
- equal($span.css("display"), display, "Expecting display: " + display);
- start();
+ jQuery.each(test, function(selector, expected) {
+ var elem = jQuery(selector, "#show-tests").show(1, function() {
+ equal( elem.css("display"), expected, "Show using correct display type for " + selector );
+ if ( ++num === 15 ) {
+ start();
+ }
});
});
+
+ jQuery("#show-tests").remove();
});
- });
- test("show() resolves correct default display #8099", function () {
- expect(7);
- var tt8099 = jQuery("
").appendTo("body"),
- dfn8099 = jQuery("
", { html : "foo"}).appendTo("body");
- equal(tt8099.css("display"), "none", "default display override for all tt");
- equal(tt8099.show().css("display"), "inline", "Correctly resolves display:inline");
- equal(jQuery("#foo").hide().show().css("display"), "block", "Correctly resolves display:block after hide/show");
+// Supports #7397
+ test("Persist correct display value", function() {
+ expect(3);
+ QUnit.reset();
+ stop();
- equal(tt8099.hide().css("display"), "none", "default display override for all tt");
- equal(tt8099.show().css("display"), "inline", "Correctly resolves display:inline");
+ // #show-tests * is set display: none in CSS
+ jQuery("#qunit-fixture").append("
foo
");
- equal(dfn8099.css("display"), "none", "default display override for all dfn");
- equal(dfn8099.show().css("display"), "inline", "Correctly resolves display:inline");
+ var $span = jQuery("#show-tests span"),
+ displayNone = $span.css("display"),
+ display = "", num = 0;
- tt8099.remove();
- dfn8099.remove();
+ $span.show();
- });
+ display = $span.css("display");
+ $span.hide();
- test("animate(Hash, Object, Function)", function () {
- expect(1);
- stop();
- var hash = {opacity : "show"};
- var hashCopy = jQuery.extend({}, hash);
- jQuery("#foo").animate(hash, 0, function () {
- equal(hash.opacity, hashCopy.opacity, "Check if animate changed the hash parameter");
- start();
+ $span.fadeIn(100, function() {
+ equal($span.css("display"), display, "Expecting display: " + display);
+ $span.fadeOut(100, function () {
+ equal($span.css("display"), displayNone, "Expecting display: " + displayNone);
+ $span.fadeIn(100, function() {
+ equal($span.css("display"), display, "Expecting display: " + display);
+ start();
+ });
+ });
+ });
});
- });
- test("animate negative height", function () {
- expect(1);
- stop();
- jQuery("#foo").animate({ height : -100 }, 100, function () {
- equal(this.offsetHeight, 0, "Verify height.");
- start();
+ test("animate(Hash, Object, Function)", function() {
+ expect(1);
+ stop();
+ var hash = {opacity: "show"};
+ var hashCopy = jQuery.extend({}, hash);
+ jQuery("#foo").animate(hash, 0, function() {
+ equal( hash.opacity, hashCopy.opacity, "Check if animate changed the hash parameter" );
+ start();
+ });
});
- });
- test("animate block as inline width/height", function () {
- expect(3);
-
- var span = jQuery("
").css("display", "inline-block").appendTo("body"),
- expected = span.css("display");
+ test("animate negative height", function() {
+ expect(1);
+ stop();
+ jQuery("#foo").animate({ height: -100 }, 100, function() {
+ equal( this.offsetHeight, 0, "Verify height." );
+ start();
+ });
+ });
- span.remove();
+ test("animate negative margin", function() {
+ expect(1);
+ stop();
+ jQuery("#foo").animate({ "marginTop": -100 }, 100, function() {
+ equal( jQuery(this).css("marginTop"), "-100px", "Verify margin." );
+ start();
+ });
+ });
- if (jQuery.support.inlineBlockNeedsLayout || expected === "inline-block") {
+ test("animate negative margin with px", function() {
+ expect(1);
stop();
+ jQuery("#foo").animate({ marginTop: "-100px" }, 100, function() {
+ equal( jQuery(this).css("marginTop"), "-100px", "Verify margin." );
+ start();
+ });
+ });
- jQuery("#foo").css({ display : "inline", width : "", height : "" }).animate({ width : 42, height : 42 }, 100, function () {
- equal(jQuery(this).css("display"), jQuery.support.inlineBlockNeedsLayout ? "inline" : "inline-block", "inline-block was set on non-floated inline element when animating width/height");
- equal(this.offsetWidth, 42, "width was animated");
- equal(this.offsetHeight, 42, "height was animated");
+ test("animate negative padding", function() {
+ expect(1);
+ stop();
+ jQuery("#foo").animate({ "paddingBottom": -100 }, 100, function() {
+ equal( jQuery(this).css("paddingBottom"), "0px", "Verify paddingBottom." );
start();
});
+ });
- // Browser doesn't support inline-block
- } else {
- ok(true, "Browser doesn't support inline-block");
- ok(true, "Browser doesn't support inline-block");
- ok(true, "Browser doesn't support inline-block");
- }
- });
+ test("animate block as inline width/height", function() {
+ expect(3);
- test("animate native inline width/height", function () {
- expect(3);
+ var span = jQuery("").css("display", "inline-block").appendTo("body"),
+ expected = span.css("display");
- var span = jQuery("").css("display", "inline-block").appendTo("body"),
- expected = span.css("display");
+ span.remove();
- span.remove();
+ if ( jQuery.support.inlineBlockNeedsLayout || expected === "inline-block" ) {
+ stop();
- if (jQuery.support.inlineBlockNeedsLayout || expected === "inline-block") {
- stop();
- jQuery("#foo").css({ display : "", width : "", height : "" })
- .append("text ")
- .children("span")
- .animate({ width : 42, height : 42 }, 100, function () {
- equal(jQuery(this).css("display"), "inline-block", "inline-block was set on non-floated inline element when animating width/height");
- equal(this.offsetWidth, 42, "width was animated");
- equal(this.offsetHeight, 42, "height was animated");
+ jQuery("#foo").css({ display: "inline", width: "", height: "" }).animate({ width: 42, height: 42 }, 100, function() {
+ equal( jQuery(this).css("display"), jQuery.support.inlineBlockNeedsLayout ? "inline" : "inline-block", "inline-block was set on non-floated inline element when animating width/height" );
+ equal( this.offsetWidth, 42, "width was animated" );
+ equal( this.offsetHeight, 42, "height was animated" );
start();
});
- // Browser doesn't support inline-block
- } else {
- ok(true, "Browser doesn't support inline-block");
- ok(true, "Browser doesn't support inline-block");
- ok(true, "Browser doesn't support inline-block");
- }
- });
-
- test("animate block width/height", function () {
- expect(3);
- stop();
- jQuery("#foo").css({ display : "block", width : 20, height : 20 }).animate({ width : 42, height : 42 }, 100, function () {
- equal(jQuery(this).css("display"), "block", "inline-block was not set on block element when animating width/height");
- equal(this.offsetWidth, 42, "width was animated");
- equal(this.offsetHeight, 42, "height was animated");
- start();
+ // Browser doesn't support inline-block
+ } else {
+ ok( true, "Browser doesn't support inline-block" );
+ ok( true, "Browser doesn't support inline-block" );
+ ok( true, "Browser doesn't support inline-block" );
+ }
});
- });
-
- test("animate table width/height", function () {
- expect(1);
- stop();
- var displayMode = jQuery("#table").css("display") !== "table" ? "block" : "table";
+ test("animate native inline width/height", function() {
+ expect(3);
- jQuery("#table").animate({ width : 42, height : 42 }, 100, function () {
- equal(jQuery(this).css("display"), displayMode, "display mode is correct");
- start();
- });
- });
+ var span = jQuery("").css("display", "inline-block").appendTo("body"),
+ expected = span.css("display");
- test("animate table-row width/height", function () {
- expect(3);
- stop();
- var tr = jQuery("#table")
- .attr({ "cellspacing" : 0, "cellpadding" : 0, "border" : 0 })
- .html("
")
- .find("tr");
+ span.remove();
- // IE<8 uses "block" instead of the correct display type
- var displayMode = tr.css("display") !== "table-row" ? "block" : "table-row";
+ if ( jQuery.support.inlineBlockNeedsLayout || expected === "inline-block" ) {
+ stop();
+ jQuery("#foo").css({ display: "", width: "", height: "" })
+ .append("text ")
+ .children("span")
+ .animate({ width: 42, height: 42 }, 100, function() {
+ equal( jQuery(this).css("display"), "inline-block", "inline-block was set on non-floated inline element when animating width/height" );
+ equal( this.offsetWidth, 42, "width was animated" );
+ equal( this.offsetHeight, 42, "height was animated" );
+ start();
+ });
- tr.animate({ width : 10, height : 10 }, 100, function () {
- equal(jQuery(this).css("display"), displayMode, "display mode is correct");
- equal(this.offsetWidth, 20, "width animated to shrink wrap point");
- equal(this.offsetHeight, 20, "height animated to shrink wrap point");
- start();
+ // Browser doesn't support inline-block
+ } else {
+ ok( true, "Browser doesn't support inline-block" );
+ ok( true, "Browser doesn't support inline-block" );
+ ok( true, "Browser doesn't support inline-block" );
+ }
});
- });
-
- test("animate table-cell width/height", function () {
- expect(3);
- stop();
- var td = jQuery("#table")
- .attr({ "cellspacing" : 0, "cellpadding" : 0, "border" : 0 })
- .html("
")
- .find("td");
- // IE<8 uses "block" instead of the correct display type
- var displayMode = td.css("display") !== "table-cell" ? "block" : "table-cell";
-
- td.animate({ width : 10, height : 10 }, 100, function () {
- equal(jQuery(this).css("display"), displayMode, "display mode is correct");
- equal(this.offsetWidth, 20, "width animated to shrink wrap point");
- equal(this.offsetHeight, 20, "height animated to shrink wrap point");
- start();
+ test("animate block width/height", function() {
+ expect(3);
+ stop();
+ jQuery("#foo").css({ display: "block", width: 20, height: 20 }).animate({ width: 42, height: 42 }, 100, function() {
+ equal( jQuery(this).css("display"), "block", "inline-block was not set on block element when animating width/height" );
+ equal( this.offsetWidth, 42, "width was animated" );
+ equal( this.offsetHeight, 42, "height was animated" );
+ start();
+ });
});
- });
- test("animate percentage(%) on width/height", function () {
- expect(2);
+ test("animate table width/height", function() {
+ expect(1);
+ stop();
- var $div = jQuery("")
- .appendTo("#qunit-fixture").children("div");
+ var displayMode = jQuery("#table").css("display") !== "table" ? "block" : "table";
- stop();
- $div.animate({ width : "25%", height : "25%" }, 13, function () {
- var $this = jQuery(this);
- equal($this.width(), 15, "Width was animated to 15px rather than 25px");
- equal($this.height(), 15, "Height was animated to 15px rather than 25px");
- start();
+ jQuery("#table").animate({ width: 42, height: 42 }, 100, function() {
+ equal( jQuery(this).css("display"), displayMode, "display mode is correct" );
+ start();
+ });
});
- });
- test("animate resets overflow-x and overflow-y when finished", function () {
- expect(2);
- stop();
- jQuery("#foo")
- .css({ display : "block", width : 20, height : 20, overflowX : "visible", overflowY : "auto" })
- .animate({ width : 42, height : 42 }, 100, function () {
- equal(this.style.overflowX, "visible", "overflow-x is visible");
- equal(this.style.overflowY, "auto", "overflow-y is auto");
+ test("animate table-row width/height", function() {
+ expect(3);
+ stop();
+ var tr = jQuery("#table")
+ .attr({ "cellspacing": 0, "cellpadding": 0, "border": 0 })
+ .html("
")
+ .find("tr");
+
+ // IE<8 uses "block" instead of the correct display type
+ var displayMode = tr.css("display") !== "table-row" ? "block" : "table-row";
+
+ tr.animate({ width: 10, height: 10 }, 100, function() {
+ equal( jQuery(this).css("display"), displayMode, "display mode is correct" );
+ equal( this.offsetWidth, 20, "width animated to shrink wrap point" );
+ equal( this.offsetHeight, 20, "height animated to shrink wrap point" );
start();
});
- });
-
- asyncTest("animate option { queue: false }", function () {
- expect(2);
- var foo = jQuery("#foo");
-
- foo.animate({
- fontSize : "2em"
- }, {
- queue : false,
- duration : 10,
- complete : function () {
- ok(true, "Animation Completed");
+ });
+
+ test("animate table-cell width/height", function() {
+ expect(3);
+ stop();
+ var td = jQuery("#table")
+ .attr({ "cellspacing": 0, "cellpadding": 0, "border": 0 })
+ .html("
")
+ .find("td");
+
+ // IE<8 uses "block" instead of the correct display type
+ var displayMode = td.css("display") !== "table-cell" ? "block" : "table-cell";
+
+ td.animate({ width: 10, height: 10 }, 100, function() {
+ equal( jQuery(this).css("display"), displayMode, "display mode is correct" );
+ equal( this.offsetWidth, 20, "width animated to shrink wrap point" );
+ equal( this.offsetHeight, 20, "height animated to shrink wrap point" );
start();
- }
+ });
});
- equal(foo.queue().length, 0, "Queue is empty");
- });
+ test("animate percentage(%) on width/height", function() {
+ expect( 2 );
- asyncTest("animate option { queue: true }", function () {
- expect(2);
- var foo = jQuery("#foo");
+ var $div = jQuery("")
+ .appendTo("#qunit-fixture").children("div");
- foo.animate({
- fontSize : "2em"
- }, {
- queue : true,
- duration : 10,
- complete : function () {
- ok(true, "Animation Completed");
+ stop();
+ $div.animate({ width: "25%", height: "25%" }, 13, function() {
+ var $this = jQuery(this);
+ equal( $this.css("width"), "15px", "Width was animated to 15px rather than 25px");
+ equal( $this.css("height"), "15px", "Height was animated to 15px rather than 25px");
start();
- }
+ });
});
- notEqual(foo.queue().length, 0, "Default queue is not empty");
- });
-
-
- asyncTest("animate option { queue: 'name' }", function () {
- expect(5);
- var foo = jQuery("#foo"),
- origWidth = foo.width(),
- order = [];
+ test("animate resets overflow-x and overflow-y when finished", function() {
+ expect(2);
+ stop();
+ jQuery("#foo")
+ .css({ display: "block", width: 20, height: 20, overflowX: "visible", overflowY: "auto" })
+ .animate({ width: 42, height: 42 }, 100, function() {
+ equal( this.style.overflowX, "visible", "overflow-x is visible" );
+ equal( this.style.overflowY, "auto", "overflow-y is auto" );
+ start();
+ });
+ });
- foo.animate({ width : origWidth + 100 }, {
- queue : 'name',
- duration : 1,
- complete : function () {
+ /* // This test ends up being flaky depending upon the CPU load
+ test("animate option (queue === false)", function () {
+ expect(1);
+ stop();
+
+ var order = [];
+
+ var $foo = jQuery("#foo");
+ $foo.animate({width:"100px"}, 3000, function () {
+ // should finish after unqueued animation so second
+ order.push(2);
+ deepEqual( order, [ 1, 2 ], "Animations finished in the correct order" );
+ start();
+ });
+ $foo.animate({fontSize:"2em"}, {queue:false, duration:10, complete:function () {
+ // short duration and out of queue so should finish first
+ order.push(1);
+ }});
+ });
+ */
+
+ asyncTest( "animate option { queue: false }", function() {
+ expect( 2 );
+ var foo = jQuery( "#foo" );
+
+ foo.animate({
+ fontSize: "2em"
+ }, {
+ queue: false,
+ duration: 10,
+ complete: function() {
+ ok( true, "Animation Completed" );
+ start();
+ }
+ });
- // second callback function
- order.push(2);
- equal(foo.width(), origWidth + 100, "Animation ended");
- equal(foo.queue("name").length, 1, "Queue length of 'name' queue");
- }
- }).queue("name", function (next) {
+ equal( foo.queue().length, 0, "Queue is empty" );
+ });
- // last callback function
- deepEqual(order, [ 1, 2 ], "Callbacks in expected order");
- start();
+ asyncTest( "animate option { queue: true }", function() {
+ expect( 2 );
+ var foo = jQuery( "#foo" );
+
+ foo.animate({
+ fontSize: "2em"
+ }, {
+ queue: true,
+ duration: 10,
+ complete: function() {
+ ok( true, "Animation Completed" );
+ start();
+ }
});
- setTimeout(function () {
+ notEqual( foo.queue().length, 0, "Default queue is not empty" );
+ });
- // this is the first callback function that should be called
- order.push(1);
- equal(foo.width(), origWidth, "Animation does not start on its own.");
- equal(foo.queue("name").length, 2, "Queue length of 'name' queue");
- foo.dequeue("name");
- }, 100);
+ asyncTest( "animate option { queue: 'name' }", function() {
+ expect( 5 );
+ var foo = jQuery( "#foo" ),
+ origWidth = parseFloat( foo.css("width") ),
+ order = [];
+
+ foo.animate( { width: origWidth + 100 }, {
+ queue: 'name',
+ duration: 1,
+ complete: function() {
+
+ // second callback function
+ order.push( 2 );
+ equal( parseFloat( foo.css("width") ), origWidth + 100, "Animation ended" );
+ equal( foo.queue("name").length, 1, "Queue length of 'name' queue" );
+ }
+ }).queue( "name", function( next ) {
- });
+ // last callback function
+ deepEqual( order, [ 1, 2 ], "Callbacks in expected order" );
+ start();
+ });
- test("animate with no properties", function () {
- expect(2);
+ setTimeout( function() {
- var divs = jQuery("div"), count = 0;
+ // this is the first callback function that should be called
+ order.push( 1 );
+ equal( parseFloat( foo.css("width") ), origWidth, "Animation does not start on its own." );
+ equal( foo.queue("name").length, 2, "Queue length of 'name' queue" );
+ foo.dequeue( "name" );
+ }, 100 );
- divs.animate({}, function () {
- count++;
});
- equal(divs.length, count, "Make sure that callback is called for each element in the set.");
+ test("animate with no properties", function() {
+ expect(2);
+
+ var divs = jQuery("div"), count = 0;
- stop();
+ divs.animate({}, function(){
+ count++;
+ });
- var foo = jQuery("#foo");
+ equal( divs.length, count, "Make sure that callback is called for each element in the set." );
- foo.animate({});
- foo.animate({ top : 10 }, 100, function () {
- ok(true, "Animation was properly dequeued.");
- start();
+ stop();
+
+ var foo = jQuery("#foo");
+
+ foo.animate({});
+ foo.animate({top: 10}, 100, function(){
+ ok( true, "Animation was properly dequeued." );
+ start();
+ });
});
- });
- test("animate duration 0", function () {
- expect(11);
+ test("animate duration 0", function() {
+ expect(11);
- stop();
+ stop();
- var $elems = jQuery([
- { a : 0 },
- { a : 0 }
- ]), counter = 0;
+ var $elems = jQuery([{ a:0 },{ a:0 }]), counter = 0;
- equal(jQuery.timers.length, 0, "Make sure no animation was running from another test");
+ equal( jQuery.timers.length, 0, "Make sure no animation was running from another test" );
- $elems.eq(0).animate({a : 1}, 0, function () {
- ok(true, "Animate a simple property.");
- counter++;
- });
+ $elems.eq(0).animate( {a:1}, 0, function(){
+ ok( true, "Animate a simple property." );
+ counter++;
+ });
- // Failed until [6115]
- equal(jQuery.timers.length, 0, "Make sure synchronic animations are not left on jQuery.timers");
+ // Failed until [6115]
+ equal( jQuery.timers.length, 0, "Make sure synchronic animations are not left on jQuery.timers" );
- equal(counter, 1, "One synchronic animations");
+ equal( counter, 1, "One synchronic animations" );
- $elems.animate({ a : 2 }, 0, function () {
- ok(true, "Animate a second simple property.");
- counter++;
- });
+ $elems.animate( { a:2 }, 0, function(){
+ ok( true, "Animate a second simple property." );
+ counter++;
+ });
- equal(counter, 3, "Multiple synchronic animations");
+ equal( counter, 3, "Multiple synchronic animations" );
- $elems.eq(0).animate({a : 3}, 0, function () {
- ok(true, "Animate a third simple property.");
- counter++;
- });
- $elems.eq(1).animate({a : 3}, 200, function () {
- counter++;
- // Failed until [6115]
- equal(counter, 5, "One synchronic and one asynchronic");
- start();
- });
+ $elems.eq(0).animate( {a:3}, 0, function(){
+ ok( true, "Animate a third simple property." );
+ counter++;
+ });
+ $elems.eq(1).animate( {a:3}, 200, function(){
+ counter++;
+ // Failed until [6115]
+ equal( counter, 5, "One synchronic and one asynchronic" );
+ start();
+ });
+
+ var $elem = jQuery("
");
+ $elem.show(0, function(){
+ ok(true, "Show callback with no duration");
+ });
+ $elem.hide(0, function(){
+ ok(true, "Hide callback with no duration");
+ });
- var $elem = jQuery("
");
- $elem.show(0, function () {
- ok(true, "Show callback with no duration");
+ // manually clean up detached elements
+ $elem.remove();
});
- $elem.hide(0, function () {
- ok(true, "Hide callback with no duration");
+
+ test("animate hyphenated properties", function() {
+ expect(1);
+ stop();
+
+ jQuery("#foo")
+ .css("font-size", 10)
+ .animate({"font-size": 20}, 200, function() {
+ equal( this.style.fontSize, "20px", "The font-size property was animated." );
+ start();
+ });
});
- // manually clean up detached elements
- $elem.remove();
- });
+ test("animate non-element", function() {
+ expect(1);
+ stop();
- test("animate hyphenated properties", function () {
- expect(1);
- stop();
+ var obj = { test: 0 };
- jQuery("#foo")
- .css("font-size", 10)
- .animate({"font-size" : 20}, 200, function () {
- equal(this.style.fontSize, "20px", "The font-size property was animated.");
+ jQuery(obj).animate({test: 200}, 200, function(){
+ equal( obj.test, 200, "The custom property should be modified." );
start();
});
- });
+ });
- test("animate non-element", function () {
- expect(1);
- stop();
+ test("stop()", function() {
+ expect( 4 );
+ stop();
- var obj = { test : 0 };
+ var $foo = jQuery("#foo"),
+ tests = 2,
+ w = 0;
+
+ $foo.hide().css( "width", 200 )
+ .animate( { "width": "show" }, 1500 );
+
+ setTimeout(function() {
+ var nw = $foo.css("width");
+ notEqual( parseFloat( nw ), w, "An animation occurred " + nw + " " + w + "px" );
+ $foo.stop();
+
+ nw = $foo.css("width");
+ notEqual( parseFloat( nw ), w, "Stop didn't reset the animation " + nw + " " + w + "px" );
+ setTimeout(function() {
+ $foo.removeData();
+ $foo.removeData(undefined, true);
+ equal( nw, $foo.css("width"), "The animation didn't continue" );
+ if ( --tests === 0 ) {
+ start();
+ }
+ }, 100);
+ }, 100);
- jQuery(obj).animate({test : 200}, 200, function () {
- equal(obj.test, 200, "The custom property should be modified.");
- start();
+ var $one = jQuery("#fadein");
+ var $two = jQuery("#show");
+ $one.fadeTo(100, 0, function() {
+ $one.stop();
+ });
+ setTimeout(function() {
+ $two.fadeTo(100, 0, function() {
+ equal( $two.css("opacity"), "0", "Stop does not interfere with animations on other elements (#6641)" );
+ // Reset styles
+ $one.add( $two ).css("opacity", "");
+ if ( --tests === 0 ) {
+ start();
+ }
+ });
+ }, 50);
});
- });
- test("stop()", function () {
- expect(4);
- stop();
+ test("stop() - several in queue", function() {
+ expect(3);
+ stop();
- var $foo = jQuery("#foo");
- var w = 0;
+ var $foo = jQuery("#foo");
+ var w = 0;
+ $foo.hide().css( "width", 200 ).css("width");
- $foo.hide().width(200)
- .animate({ width : "show" }, 1000);
+ $foo.animate({ "width": "show" }, 1500);
+ $foo.animate({ "width": "hide" }, 1000);
+ $foo.animate({ "width": "show" }, 1000);
+ setTimeout(function(){
+ equal( $foo.queue().length, 3, "All 3 still in the queue" );
+ var nw = $foo.css("width");
+ notEqual( parseFloat( nw ), w, "An animation occurred " + nw + " " + w + "px");
+ $foo.stop();
- setTimeout(function () {
- var nw = $foo.width();
- notEqual(nw, w, "An animation occurred " + nw + "px " + w + "px");
- $foo.stop();
+ nw = $foo.css("width");
+ notEqual( parseFloat( nw ), w, "Stop didn't reset the animation " + nw + " " + w + "px");
- nw = $foo.width();
- notEqual(nw, w, "Stop didn't reset the animation " + nw + "px " + w + "px");
- setTimeout(function () {
- $foo.removeData();
- $foo.removeData(undefined, true);
- equal(nw, $foo.width(), "The animation didn't continue");
- start();
- }, 100);
- }, 100);
-
- var $one = jQuery("#fadein");
- var $two = jQuery("#show");
- $one.fadeTo(100, 0, function () {
- $one.stop();
- });
- setTimeout(function () {
- $two.fadeTo(100, 0, function () {
- equal($two.css("opacity"), "0", "Stop does not interfere with animations on other elements (#6641)");
- // Reset styles
- $one.add($two).css("opacity", "");
- });
- }, 50);
- });
-
- test("stop() - several in queue", function () {
- expect(3);
- stop();
-
- var $foo = jQuery("#foo");
- var w = 0;
- $foo.hide().width(200).width();
-
- $foo.animate({ width : "show" }, 1000);
- $foo.animate({ width : "hide" }, 1000);
- $foo.animate({ width : "show" }, 1000);
- setTimeout(function () {
- equal($foo.queue().length, 3, "All 3 still in the queue");
- var nw = $foo.width();
- notEqual(nw, w, "An animation occurred " + nw + "px " + w + "px");
- $foo.stop();
-
- nw = $foo.width();
- notEqual(nw, w, "Stop didn't reset the animation " + nw + "px " + w + "px");
-
- $foo.stop(true);
- start();
- }, 100);
- });
-
- test("stop(clearQueue)", function () {
- expect(4);
- stop();
-
- var $foo = jQuery("#foo");
- var w = 0;
- $foo.hide().width(200).width();
-
- $foo.animate({ width : "show" }, 1000);
- $foo.animate({ width : "hide" }, 1000);
- $foo.animate({ width : "show" }, 1000);
- setTimeout(function () {
- var nw = $foo.width();
- ok(nw != w, "An animation occurred " + nw + "px " + w + "px");
- $foo.stop(true);
-
- nw = $foo.width();
- ok(nw != w, "Stop didn't reset the animation " + nw + "px " + w + "px");
-
- equal($foo.queue().length, 0, "The animation queue was cleared");
- setTimeout(function () {
- equal(nw, $foo.width(), "The animation didn't continue");
+ $foo.stop(true);
start();
+ }, 200);
+ });
+
+ test("stop(clearQueue)", function() {
+ expect(4);
+ stop();
+
+ var $foo = jQuery("#foo");
+ var w = 0;
+ $foo.hide().css( "width", 200 ).css("width");
+
+ $foo.animate({ "width": "show" }, 1000);
+ $foo.animate({ "width": "hide" }, 1000);
+ $foo.animate({ "width": "show" }, 1000);
+ setTimeout(function(){
+ var nw = $foo.css("width");
+ ok( parseFloat( nw ) != w, "An animation occurred " + nw + " " + w + "px");
+ $foo.stop(true);
+
+ nw = $foo.css("width");
+ ok( parseFloat( nw ) != w, "Stop didn't reset the animation " + nw + " " + w + "px");
+
+ equal( $foo.queue().length, 0, "The animation queue was cleared" );
+ setTimeout(function(){
+ equal( nw, $foo.css("width"), "The animation didn't continue" );
+ start();
+ }, 100);
}, 100);
- }, 100);
- });
-
- test("stop(clearQueue, gotoEnd)", function () {
- expect(1);
- stop();
-
- var $foo = jQuery("#foo");
- var w = 0;
- $foo.hide().width(200).width();
-
- $foo.animate({ width : "show" }, 1000);
- $foo.animate({ width : "hide" }, 1000);
- $foo.animate({ width : "show" }, 1000);
- $foo.animate({ width : "hide" }, 1000);
- setTimeout(function () {
- var nw = $foo.width();
- ok(nw != w, "An animation occurred " + nw + "px " + w + "px");
- $foo.stop(false, true);
-
- nw = $foo.width();
- // Disabled, being flaky
- //equal( nw, 1, "Stop() reset the animation" );
-
- setTimeout(function () {
+ });
+
+ test("stop(clearQueue, gotoEnd)", function() {
+ expect(1);
+ stop();
+
+ var $foo = jQuery("#foo");
+ var w = 0;
+ $foo.hide().css( "width", 200 ).css("width");
+
+ $foo.animate({ width: "show" }, 1000);
+ $foo.animate({ width: "hide" }, 1000);
+ $foo.animate({ width: "show" }, 1000);
+ $foo.animate({ width: "hide" }, 1000);
+ setTimeout(function(){
+ var nw = $foo.css("width");
+ ok( parseFloat( nw ) != w, "An animation occurred " + nw + " " + w + "px");
+ $foo.stop(false, true);
+
+ nw = $foo.css("width");
// Disabled, being flaky
- //equal( $foo.queue().length, 2, "The next animation continued" );
- $foo.stop(true);
- start();
+ //equal( nw, 1, "Stop() reset the animation" );
+
+ setTimeout(function(){
+ // Disabled, being flaky
+ //equal( $foo.queue().length, 2, "The next animation continued" );
+ $foo.stop(true);
+ start();
+ }, 100);
}, 100);
- }, 100);
- });
-
- asyncTest("stop( queue, ..., ... ) - Stop single queues", function () {
- expect(3);
- var foo = jQuery("#foo"),
- saved;
-
- foo.width(200).height(200);
- foo.animate({
- width : 400
- }, {
- duration : 1000,
- complete : function () {
- equal(foo.width(), 400, "Animation completed for standard queue");
- equal(foo.height(), saved, "Height was not changed after the second stop");
- start();
- }
});
- foo.animate({
- height : 400
- }, {
- duration : 1000,
- queue : "height"
- }).dequeue("height").stop("height", false, true);
-
- equal(foo.height(), 400, "Height was stopped with gotoEnd");
-
- foo.animate({
- height : 200
- }, {
- duration : 1000,
- queue : "height"
- }).dequeue("height").stop("height", false, false);
- saved = foo.height();
- });
-
- test("toggle()", function () {
- expect(6);
- var x = jQuery("#foo");
- ok(x.is(":visible"), "is visible");
- x.toggle();
- ok(x.is(":hidden"), "is hidden");
- x.toggle();
- ok(x.is(":visible"), "is visible again");
-
- x.toggle(true);
- ok(x.is(":visible"), "is visible");
- x.toggle(false);
- ok(x.is(":hidden"), "is hidden");
- x.toggle(true);
- ok(x.is(":visible"), "is visible again");
- });
-
- jQuery.checkOverflowDisplay = function () {
- var o = jQuery.css(this, "overflow");
-
- equal(o, "visible", "Overflow should be visible: " + o);
- equal(jQuery.css(this, "display"), "inline", "Display shouldn't be tampered with.");
-
- start();
- };
-
- test("jQuery.fx.prototype.cur()", 6, function () {
- var div = jQuery("
").appendTo("#qunit-fixture").css({
- color : "#ABC",
- border : "5px solid black",
- left : "auto",
- marginBottom : "-11000px"
- })[0];
-
- equal(
- ( new jQuery.fx(div, {}, "color") ).cur(),
- jQuery.css(div, "color"),
- "Return the same value as jQuery.css for complex properties (bug #7912)"
- );
-
- strictEqual(
- ( new jQuery.fx(div, {}, "borderLeftWidth") ).cur(),
- 5,
- "Return simple values parsed as Float"
- );
-
- // backgroundPosition actually returns 0% 0% in most browser
- // this fakes a "" return
- jQuery.cssHooks.backgroundPosition = {
- get : function () {
- ok(true, "hook used");
- return "";
- }
+ asyncTest( "stop( queue, ..., ... ) - Stop single queues", function() {
+ expect( 3 );
+ var foo = jQuery( "#foo" ),
+ saved;
+
+ foo.css( "width", 200 ).css( "height", 200 );
+ foo.animate({
+ width: 400
+ },{
+ duration: 1000,
+ complete: function() {
+ equal( parseFloat( foo.css("width") ), 400, "Animation completed for standard queue" );
+ equal( parseFloat( foo.css("height") ), saved, "Height was not changed after the second stop");
+ start();
+ }
+ });
+
+ foo.animate({
+ height: 400
+ },{
+ duration: 1000,
+ queue: "height"
+ }).dequeue( "height" ).stop( "height", false, true );
+
+ equal( parseFloat( foo.css("height") ), 400, "Height was stopped with gotoEnd" );
+
+ foo.animate({
+ height: 200
+ },{
+ duration: 1000,
+ queue: "height"
+ }).dequeue( "height" ).stop( "height", false, false );
+ saved = parseFloat( foo.css("height") );
+ });
+
+ test("toggle()", function() {
+ expect(6);
+ var x = jQuery("#foo");
+ ok( x.is(":visible"), "is visible" );
+ x.toggle();
+ ok( x.is(":hidden"), "is hidden" );
+ x.toggle();
+ ok( x.is(":visible"), "is visible again" );
+
+ x.toggle(true);
+ ok( x.is(":visible"), "is visible" );
+ x.toggle(false);
+ ok( x.is(":hidden"), "is hidden" );
+ x.toggle(true);
+ ok( x.is(":visible"), "is visible again" );
+ });
+
+ jQuery.checkOverflowDisplay = function(){
+ var o = jQuery.css( this, "overflow" );
+
+ equal(o, "visible", "Overflow should be visible: " + o);
+ equal(jQuery.css( this, "display" ), "inline", "Display shouldn't be tampered with.");
+
+ jQuery(this).remove();
+ start();
};
- strictEqual(
- ( new jQuery.fx(div, {}, "backgroundPosition") ).cur(),
- 0,
- "Return 0 when jQuery.css returns an empty string"
- );
-
- delete jQuery.cssHooks.backgroundPosition;
-
- strictEqual(
- ( new jQuery.fx(div, {}, "left") ).cur(),
- 0,
- "Return 0 when jQuery.css returns 'auto'"
- );
-
- equal(
- ( new jQuery.fx(div, {}, "marginBottom") ).cur(),
- -11000,
- "support negative values < -10000 (bug #7193)"
- );
- });
-
- test("JS Overflow and Display", function () {
- expect(2);
- stop();
- jQuery.makeTest("JS Overflow and Display")
- .addClass("widewidth")
- .css({ overflow : "visible", display : "inline" })
- .addClass("widewidth")
- .text("Some sample text.")
- .before("text before")
- .after("text after")
- .animate({ opacity : 0.5 }, "slow", jQuery.checkOverflowDisplay);
- });
-
- test("CSS Overflow and Display", function () {
- expect(2);
- stop();
- jQuery.makeTest("CSS Overflow and Display")
- .addClass("overflow inline")
- .addClass("widewidth")
- .text("Some sample text.")
- .before("text before")
- .after("text after")
- .animate({ opacity : 0.5 }, "slow", jQuery.checkOverflowDisplay);
- });
-
- jQuery.each({
- "CSS Auto" : function (elem, prop) {
- jQuery(elem).addClass("auto" + prop)
- .text("This is a long string of text.");
- return "";
- },
- "JS Auto" : function (elem, prop) {
- jQuery(elem).css(prop, "")
- .text("This is a long string of text.");
- return "";
- },
- "CSS 100" : function (elem, prop) {
- jQuery(elem).addClass("large" + prop);
- return "";
- },
- "JS 100" : function (elem, prop) {
- jQuery(elem).css(prop, prop === "opacity" ? 1 : "100px");
- return prop === "opacity" ? 1 : 100;
- },
- "CSS 50" : function (elem, prop) {
- jQuery(elem).addClass("med" + prop);
- return "";
- },
- "JS 50" : function (elem, prop) {
- jQuery(elem).css(prop, prop === "opacity" ? 0.50 : "50px");
- return prop === "opacity" ? 0.5 : 50;
- },
- "CSS 0" : function (elem, prop) {
- jQuery(elem).addClass("no" + prop);
- return "";
- },
- "JS 0" : function (elem, prop) {
- jQuery(elem).css(prop, prop === "opacity" ? 0 : "0px");
- return 0;
- }
- }, function (fn, f) {
+ test( "jQuery.fx.prototype.cur() - <1.8 Back Compat", 7, function() {
+ var div = jQuery( "
" ).appendTo( "#qunit-fixture" ).css({
+ color: "#ABC",
+ border: "5px solid black",
+ left: "auto",
+ marginBottom: "-11000px"
+ })[0];
+
+ equal(
+ ( new jQuery.fx( div, {}, "color" ) ).cur(),
+ jQuery.css( div, "color" ),
+ "Return the same value as jQuery.css for complex properties (bug #7912)"
+ );
+
+ strictEqual(
+ ( new jQuery.fx( div, {}, "borderLeftWidth" ) ).cur(),
+ 5,
+ "Return simple values parsed as Float"
+ );
+
+ // backgroundPosition actually returns 0% 0% in most browser
+ // this fakes a "" return
+ // hook now gets called twice because Tween will grab the current
+ // value as it is being newed
+ jQuery.cssHooks.backgroundPosition = {
+ get: function() {
+ ok( true, "hook used" );
+ return "";
+ }
+ };
+
+ strictEqual(
+ ( new jQuery.fx( div, {}, "backgroundPosition" ) ).cur(),
+ 0,
+ "Return 0 when jQuery.css returns an empty string"
+ );
+
+ delete jQuery.cssHooks.backgroundPosition;
+
+ strictEqual(
+ ( new jQuery.fx( div, {}, "left" ) ).cur(),
+ 0,
+ "Return 0 when jQuery.css returns 'auto'"
+ );
+
+ equal(
+ ( new jQuery.fx( div, {}, "marginBottom" ) ).cur(),
+ -11000,
+ "support negative values < -10000 (bug #7193)"
+ );
+
+ jQuery( div ).remove();
+ });
+
+ test("JS Overflow and Display", function() {
+ expect(2);
+ stop();
+ jQuery.makeTest( "JS Overflow and Display" )
+ .addClass("widewidth")
+ .css({ overflow: "visible", display: "inline" })
+ .addClass("widewidth")
+ .text("Some sample text.")
+ .before("text before")
+ .after("text after")
+ .animate({ opacity: 0.5 }, "slow", jQuery.checkOverflowDisplay);
+ });
+
+ test("CSS Overflow and Display", function() {
+ expect(2);
+ stop();
+ jQuery.makeTest( "CSS Overflow and Display" )
+ .addClass("overflow inline")
+ .addClass("widewidth")
+ .text("Some sample text.")
+ .before("text before")
+ .after("text after")
+ .animate({ opacity: 0.5 }, "slow", jQuery.checkOverflowDisplay);
+ });
+
jQuery.each({
- "show" : function (elem, prop) {
- jQuery(elem).hide().addClass("wide" + prop);
- return "show";
+ "CSS Auto": function( elem, prop ) {
+ jQuery( elem ).addClass( "auto" + prop )
+ .text( "This is a long string of text." );
+ return "";
+ },
+ "JS Auto": function( elem, prop ) {
+ jQuery( elem ).css( prop, "" )
+ .text( "This is a long string of text." );
+ return "";
+ },
+ "CSS 100": function( elem, prop ) {
+ jQuery( elem ).addClass( "large" + prop );
+ return "";
},
- "hide" : function (elem, prop) {
- jQuery(elem).addClass("wide" + prop);
- return "hide";
+ "JS 100": function( elem, prop ) {
+ jQuery( elem ).css( prop, prop === "opacity" ? 1 : "100px" );
+ return prop === "opacity" ? 1 : 100;
},
- "100" : function (elem, prop) {
- jQuery(elem).addClass("wide" + prop);
- return prop == "opacity" ? 1 : 100;
+ "CSS 50": function( elem, prop ) {
+ jQuery( elem ).addClass( "med" + prop );
+ return "";
},
- "50" : function (elem, prop) {
- return prop == "opacity" ? 0.50 : 50;
+ "JS 50": function( elem, prop ) {
+ jQuery( elem ).css( prop, prop === "opacity" ? 0.50 : "50px" );
+ return prop === "opacity" ? 0.5 : 50;
},
- "0" : function (elem, prop) {
- jQuery(elem).addClass("noback");
+ "CSS 0": function( elem, prop ) {
+ jQuery( elem ).addClass( "no" + prop );
+ return "";
+ },
+ "JS 0": function( elem, prop ) {
+ jQuery( elem ).css( prop, prop === "opacity" ? 0 : "0px" );
return 0;
}
- }, function (tn, t) {
- test(fn + " to " + tn, function () {
- var elem = jQuery.makeTest(fn + " to " + tn);
-
- var t_w = t(elem, "width");
- var f_w = f(elem, "width");
- var t_h = t(elem, "height");
- var f_h = f(elem, "height");
- var t_o = t(elem, "opacity");
- var f_o = f(elem, "opacity");
-
- if (f_o === "") {
- f_o = 1;
+ }, function( fn, f ) {
+ jQuery.each({
+ "show": function( elem, prop ) {
+ jQuery( elem ).hide( ).addClass( "wide" + prop );
+ return "show";
+ },
+ "hide": function( elem, prop ) {
+ jQuery( elem ).addClass( "wide" + prop );
+ return "hide";
+ },
+ "100": function( elem, prop ) {
+ jQuery( elem ).addClass( "wide" + prop );
+ return prop == "opacity" ? 1 : 100;
+ },
+ "50": function( elem, prop ) {
+ return prop == "opacity" ? 0.50 : 50;
+ },
+ "0": function( elem, prop ) {
+ jQuery( elem ).addClass( "noback" );
+ return 0;
}
+ }, function( tn, t ) {
+ test(fn + " to " + tn, function() {
+ var elem = jQuery.makeTest( fn + " to " + tn );
+
+ var t_w = t( elem, "width" );
+ var f_w = f( elem, "width" );
+ var t_h = t( elem, "height" );
+ var f_h = f( elem, "height" );
+ var t_o = t( elem, "opacity" );
+ var f_o = f( elem, "opacity" );
+
+ if ( f_o === "" ) {
+ f_o = 1;
+ }
- var num = 0;
-
- if (t_h == "show") num++;
- if (t_w == "show") num++;
- if (t_w == "hide" || t_w == "show") num++;
- if (t_h == "hide" || t_h == "show") num++;
- if (t_o == "hide" || t_o == "show") num++;
- if (t_w == "hide") num++;
- if (t_o.constructor == Number) num += 2;
- if (t_w.constructor == Number) num += 2;
- if (t_h.constructor == Number) num += 2;
-
- expect(num);
- stop();
+ var num = 0;
+ // TODO: uncrowd this
+ if ( t_h == "show" ) {num++;}
+ if ( t_w == "show" ) {num++;}
+ if ( t_w == "hide" || t_w == "show" ) {num++;}
+ if ( t_h == "hide" || t_h == "show" ) {num++;}
+ if ( t_o == "hide" || t_o == "show" ) {num++;}
+ if ( t_w == "hide" ) {num++;}
+ if ( t_o.constructor == Number ) {num += 2;}
+ if ( t_w.constructor == Number ) {num += 2;}
+ if ( t_h.constructor == Number ) {num +=2;}
+
+ expect( num );
+ stop();
- var anim = { width : t_w, height : t_h, opacity : t_o };
+ var anim = { width: t_w, height: t_h, opacity: t_o };
- elem.animate(anim, 50);
+ elem.animate(anim, 50);
- jQuery.when(elem).done(function (elem) {
+ jQuery.when( elem ).done(function( elem ) {
- elem = elem[ 0 ];
+ elem = elem[ 0 ];
- if (t_w == "show") {
- equal(elem.style.display, "block", "Showing, display should block: " + elem.style.display);
- }
+ if ( t_w == "show" ) {
+ equal( elem.style.display, "block", "Showing, display should block: " + elem.style.display );
+ }
- if (t_w == "hide" || t_w == "show") {
- ok(f_w === "" ? elem.style.width === f_w : elem.style.width.indexOf(f_w) === 0, "Width must be reset to " + f_w + ": " + elem.style.width);
- }
+ if ( t_w == "hide" || t_w == "show" ) {
+ ok( f_w === "" ? elem.style.width === f_w : elem.style.width.indexOf( f_w ) === 0, "Width must be reset to " + f_w + ": " + elem.style.width );
+ }
- if (t_h == "hide" || t_h == "show") {
- ok(f_h === "" ? elem.style.height === f_h : elem.style.height.indexOf(f_h) === 0, "Height must be reset to " + f_h + ": " + elem.style.height);
- }
+ if ( t_h == "hide" || t_h == "show" ) {
+ ok( f_h === "" ? elem.style.height === f_h : elem.style.height.indexOf( f_h ) === 0, "Height must be reset to " + f_h + ": " + elem.style.height );
+ }
- var cur_o = jQuery.style(elem, "opacity");
+ var cur_o = jQuery.style(elem, "opacity");
- if (f_o !== jQuery.css(elem, "opacity")) {
- f_o = f(elem, "opacity");
- }
+ if ( f_o !== jQuery.css(elem, "opacity") ) {
+ f_o = f( elem, "opacity" );
+ }
- // The only time an _empty_string_ will be matched is in IE
- // otherwise, the correct values will be tested as usual
- if (f_o === "") {
- f_o = 1;
- }
- // See above
- if (cur_o === "") {
- cur_o = 1;
- }
+ // The only time an _empty_string_ will be matched is in IE
+ // otherwise, the correct values will be tested as usual
+ if ( f_o === "" ) {
+ f_o = 1;
+ }
+ // See above
+ if ( cur_o === "" ) {
+ cur_o = 1;
+ }
- if (t_o == "hide" || t_o == "show") {
- equal(cur_o, f_o, "Opacity must be reset to " + f_o + ": " + cur_o);
- }
+ if ( t_o == "hide" || t_o == "show" ) {
+ equal( cur_o, f_o, "Opacity must be reset to " + f_o + ": " + cur_o );
+ }
- if (t_w == "hide") {
- equal(elem.style.display, "none", "Hiding, display should be none: " + elem.style.display);
- }
+ if ( t_w == "hide" ) {
+ equal( elem.style.display, "none", "Hiding, display should be none: " + elem.style.display );
+ }
- if (t_o.constructor == Number) {
- equal(cur_o, t_o, "Final opacity should be " + t_o + ": " + cur_o);
+ if ( t_o.constructor == Number ) {
+ equal( cur_o, t_o, "Final opacity should be " + t_o + ": " + cur_o );
- ok(jQuery.css(elem, "opacity") != "" || cur_o == t_o, "Opacity should be explicitly set to " + t_o + ", is instead: " + cur_o);
- }
+ ok( jQuery.css(elem, "opacity") !== "" || cur_o == t_o, "Opacity should be explicitly set to " + t_o + ", is instead: " + cur_o );
+ }
- if (t_w.constructor == Number) {
- equal(elem.style.width, t_w + "px", "Final width should be " + t_w + ": " + elem.style.width);
+ if ( t_w.constructor == Number ) {
+ equal( elem.style.width, t_w + "px", "Final width should be " + t_w + ": " + elem.style.width );
- var cur_w = jQuery.css(elem, "width");
+ var cur_w = jQuery.css( elem,"width" );
- ok(elem.style.width != "" || cur_w == t_w, "Width should be explicitly set to " + t_w + ", is instead: " + cur_w);
- }
+ ok( elem.style.width !== "" || cur_w == t_w, "Width should be explicitly set to " + t_w + ", is instead: " + cur_w );
+ }
- if (t_h.constructor == Number) {
- equal(elem.style.height, t_h + "px", "Final height should be " + t_h + ": " + elem.style.height);
+ if ( t_h.constructor == Number ) {
+ equal( elem.style.height, t_h + "px", "Final height should be " + t_h + ": " + elem.style.height );
- var cur_h = jQuery.css(elem, "height");
+ var cur_h = jQuery.css( elem,"height" );
- ok(elem.style.height != "" || cur_h == t_h, "Height should be explicitly set to " + t_h + ", is instead: " + cur_w);
- }
+ ok( elem.style.height !== "" || cur_h == t_h, "Height should be explicitly set to " + t_h + ", is instead: " + cur_h );
+ }
- if (t_h == "show") {
- var old_h = jQuery.css(elem, "height");
- jQuery(elem).append(" Some more text and some more...");
+ if ( t_h == "show" ) {
+ var old_h = jQuery.css( elem, "height" );
+ jQuery( elem ).append(" Some more text and some more...");
- if (/Auto/.test(fn)) {
- notEqual(jQuery.css(elem, "height"), old_h, "Make sure height is auto.");
- } else {
- equal(jQuery.css(elem, "height"), old_h, "Make sure height is not auto.");
+ if ( /Auto/.test( fn ) ) {
+ notEqual( jQuery.css( elem, "height" ), old_h, "Make sure height is auto." );
+ } else {
+ equal( jQuery.css( elem, "height" ), old_h, "Make sure height is not auto." );
+ }
}
- }
- // manually remove generated element
- jQuery(elem).remove();
+ // manually remove generated element
+ jQuery( elem ).remove();
- start();
+ start();
+ });
});
});
});
- });
- jQuery.fn.saveState = function (hiddenOverflow) {
- var check = ["opacity", "height", "width", "display", "overflow"];
- expect(check.length);
+ jQuery.fn.saveState = function( hiddenOverflow ) {
+ var check = ["opacity", "height", "width", "display", "overflow"];
+ expect(check.length);
+
+ stop();
+ return this.each(function(){
+ var self = this;
+ self.save = {};
+ jQuery.each(check, function( i, c ) {
+ self.save[ c ] = c === "overflow" && hiddenOverflow ? "hidden" : self.style[ c ] || jQuery.css( self, c );
+ });
+ });
+ };
- stop();
- return this.each(function () {
+ /** @expose */
+ jQuery.checkState = function() {
var self = this;
- self.save = {};
- jQuery.each(check, function (i, c) {
- self.save[ c ] = c === "overflow" && hiddenOverflow ? "hidden" : self.style[ c ] || jQuery.css(self, c);
+ jQuery.each(this.save, function( c, v ) {
+ var cur = self.style[ c ] || jQuery.css( self, c );
+ equal( cur, v, "Make sure that " + c + " is reset (Old: " + v + " Cur: " + cur + ")");
});
+
+ // manually clean data on modified element
+ jQuery.removeData( this, "olddisplay", true );
+
+ start();
+ };
+
+// Chaining Tests
+ test("Chain fadeOut fadeIn", function() {
+ jQuery("#fadein div").saveState().fadeOut("fast").fadeIn("fast", jQuery.checkState );
+ });
+ test("Chain fadeIn fadeOut", function() {
+ jQuery("#fadeout div").saveState().fadeIn("fast").fadeOut("fast", jQuery.checkState );
+ });
+
+ test("Chain hide show", function() {
+ jQuery("#show div").saveState( jQuery.support.shrinkWrapBlocks ).hide("fast").show("fast", jQuery.checkState );
+ });
+ test("Chain show hide", function() {
+ jQuery("#hide div").saveState( jQuery.support.shrinkWrapBlocks ).show("fast").hide("fast", jQuery.checkState );
+ });
+ test("Chain show hide with easing and callback", function() {
+ jQuery("#hide div").saveState().show("fast").hide("fast","linear", jQuery.checkState );
+ });
+
+ test("Chain toggle in", function() {
+ jQuery("#togglein div").saveState( jQuery.support.shrinkWrapBlocks ).toggle("fast").toggle("fast", jQuery.checkState );
+ });
+ test("Chain toggle out", function() {
+ jQuery("#toggleout div").saveState( jQuery.support.shrinkWrapBlocks ).toggle("fast").toggle("fast", jQuery.checkState );
+ });
+ test("Chain toggle out with easing and callback", function() {
+ jQuery("#toggleout div").saveState( jQuery.support.shrinkWrapBlocks ).toggle("fast").toggle("fast","linear", jQuery.checkState );
+ });
+ test("Chain slideDown slideUp", function() {
+ jQuery("#slidedown div").saveState( jQuery.support.shrinkWrapBlocks ).slideDown("fast").slideUp("fast", jQuery.checkState );
+ });
+ test("Chain slideUp slideDown", function() {
+ jQuery("#slideup div").saveState( jQuery.support.shrinkWrapBlocks ).slideUp("fast").slideDown("fast", jQuery.checkState );
+ });
+ test("Chain slideUp slideDown with easing and callback", function() {
+ jQuery("#slideup div").saveState( jQuery.support.shrinkWrapBlocks ).slideUp("fast").slideDown("fast","linear", jQuery.checkState );
+ });
+
+ test("Chain slideToggle in", function() {
+ jQuery("#slidetogglein div").saveState( jQuery.support.shrinkWrapBlocks ).slideToggle("fast").slideToggle("fast", jQuery.checkState );
+ });
+ test("Chain slideToggle out", function() {
+ jQuery("#slidetoggleout div").saveState( jQuery.support.shrinkWrapBlocks ).slideToggle("fast").slideToggle("fast", jQuery.checkState );
});
- };
- jQuery.checkState = function () {
- var self = this;
- jQuery.each(this.save, function (c, v) {
- var cur = self.style[ c ] || jQuery.css(self, c);
- equal(cur, v, "Make sure that " + c + " is reset (Old: " + v + " Cur: " + cur + ")");
+ test("Chain fadeToggle in", function() {
+ jQuery("#fadetogglein div").saveState().fadeToggle("fast").fadeToggle("fast", jQuery.checkState );
+ });
+ test("Chain fadeToggle out", function() {
+ jQuery("#fadetoggleout div").saveState().fadeToggle("fast").fadeToggle("fast", jQuery.checkState );
});
- // manually clean data on modified element
- jQuery.removeData(this, "olddisplay", true);
+ test("Chain fadeTo 0.5 1.0 with easing and callback)", function() {
+ jQuery("#fadeto div").saveState().fadeTo("fast",0.5).fadeTo("fast",1.0,"linear", jQuery.checkState );
+ });
- start();
- };
+ jQuery.makeTest = function( text ){
+ var elem = jQuery("
")
+ .attr( "id", "test" + jQuery.makeTest.id++ )
+ .addClass("box");
-// Chaining Tests
- test("Chain fadeOut fadeIn", function () {
- jQuery("#fadein div").saveState().fadeOut("fast").fadeIn("fast", jQuery.checkState);
- });
- test("Chain fadeIn fadeOut", function () {
- jQuery("#fadeout div").saveState().fadeIn("fast").fadeOut("fast", jQuery.checkState);
- });
-
- test("Chain hide show", function () {
- jQuery("#show div").saveState(jQuery.support.shrinkWrapBlocks).hide("fast").show("fast", jQuery.checkState);
- });
- test("Chain show hide", function () {
- jQuery("#hide div").saveState(jQuery.support.shrinkWrapBlocks).show("fast").hide("fast", jQuery.checkState);
- });
- test("Chain show hide with easing and callback", function () {
- jQuery("#hide div").saveState().show("fast").hide("fast", "linear", jQuery.checkState);
- });
-
- test("Chain toggle in", function () {
- jQuery("#togglein div").saveState(jQuery.support.shrinkWrapBlocks).toggle("fast").toggle("fast", jQuery.checkState);
- });
- test("Chain toggle out", function () {
- jQuery("#toggleout div").saveState(jQuery.support.shrinkWrapBlocks).toggle("fast").toggle("fast", jQuery.checkState);
- });
- test("Chain toggle out with easing and callback", function () {
- jQuery("#toggleout div").saveState(jQuery.support.shrinkWrapBlocks).toggle("fast").toggle("fast", "linear", jQuery.checkState);
- });
- test("Chain slideDown slideUp", function () {
- jQuery("#slidedown div").saveState(jQuery.support.shrinkWrapBlocks).slideDown("fast").slideUp("fast", jQuery.checkState);
- });
- test("Chain slideUp slideDown", function () {
- jQuery("#slideup div").saveState(jQuery.support.shrinkWrapBlocks).slideUp("fast").slideDown("fast", jQuery.checkState);
- });
- test("Chain slideUp slideDown with easing and callback", function () {
- jQuery("#slideup div").saveState(jQuery.support.shrinkWrapBlocks).slideUp("fast").slideDown("fast", "linear", jQuery.checkState);
- });
-
- test("Chain slideToggle in", function () {
- jQuery("#slidetogglein div").saveState(jQuery.support.shrinkWrapBlocks).slideToggle("fast").slideToggle("fast", jQuery.checkState);
- });
- test("Chain slideToggle out", function () {
- jQuery("#slidetoggleout div").saveState(jQuery.support.shrinkWrapBlocks).slideToggle("fast").slideToggle("fast", jQuery.checkState);
- });
-
- test("Chain fadeToggle in", function () {
- jQuery("#fadetogglein div").saveState().fadeToggle("fast").fadeToggle("fast", jQuery.checkState);
- });
- test("Chain fadeToggle out", function () {
- jQuery("#fadetoggleout div").saveState().fadeToggle("fast").fadeToggle("fast", jQuery.checkState);
- });
-
- test("Chain fadeTo 0.5 1.0 with easing and callback)", function () {
- jQuery("#fadeto div").saveState().fadeTo("fast", 0.5).fadeTo("fast", 1.0, "linear", jQuery.checkState);
- });
-
- jQuery.makeTest = function (text) {
- var elem = jQuery("
")
- .attr("id", "test" + jQuery.makeTest.id++)
- .addClass("box");
-
- jQuery(" ")
- .text(text)
- .appendTo("#fx-tests")
- .after(elem);
-
- return elem;
- };
-
- jQuery.makeTest.id = 1;
-
- test("jQuery.show('fast') doesn't clear radio buttons (bug #1095)", function () {
- expect(4);
- stop();
-
- var $checkedtest = jQuery("#checkedtest");
- // IE6 was clearing "checked" in jQuery(elem).show("fast");
- $checkedtest.hide().show("fast", function () {
- ok(!!jQuery(":radio:first", $checkedtest).attr("checked"), "Check first radio still checked.");
- ok(!jQuery(":radio:last", $checkedtest).attr("checked"), "Check last radio still NOT checked.");
- ok(!!jQuery(":checkbox:first", $checkedtest).attr("checked"), "Check first checkbox still checked.");
- ok(!jQuery(":checkbox:last", $checkedtest).attr("checked"), "Check last checkbox still NOT checked.");
- start();
+ jQuery(" ")
+ .text( text )
+ .appendTo("#fx-tests")
+ .after( elem );
+
+ return elem;
+ };
+
+ jQuery.makeTest.id = 1;
+
+ test("jQuery.show('fast') doesn't clear radio buttons (bug #1095)", function () {
+ expect(4);
+ stop();
+
+ var $checkedtest = jQuery("#checkedtest");
+ // IE6 was clearing "checked" in jQuery(elem).show("fast");
+ $checkedtest.hide().show("fast", function() {
+ ok( !! jQuery(":radio:first", $checkedtest).attr("checked"), "Check first radio still checked." );
+ ok( ! jQuery(":radio:last", $checkedtest).attr("checked"), "Check last radio still NOT checked." );
+ ok( !! jQuery(":checkbox:first", $checkedtest).attr("checked"), "Check first checkbox still checked." );
+ ok( ! jQuery(":checkbox:last", $checkedtest).attr("checked"), "Check last checkbox still NOT checked." );
+ start();
+ });
});
- });
- jQuery.each({
- "slideToggle" : function ($elem) {
- return $elem.height();
- },
- "fadeToggle" : function ($elem) {
- return $elem.css("opacity");
+ jQuery.expandedEach = jQuery.each;
+ jQuery.expandedEach({
+ "slideToggle": function( $elem ) {
+ return parseFloat( $elem.css("height") );
+ },
+ "fadeToggle": function( $elem ) {
+ return $elem.css("opacity");
+ },
+ "toggle": function( $elem ) {
+ return parseFloat( $elem.css("width") );
+ }
},
- "toggle" : function ($elem) {
- return $elem.width();
- }
- },
- function (method, defProp) {
- test(method + "().stop()." + method + "()", function () {
- expect(4);
+ function( method, defProp ) {
+ test( method + "().stop()." + method + "()", function() {
+ expect( 8 );
- jQuery.each([ "in", "out" ], function (i, type) {
- var $elem = jQuery("#" + method.toLowerCase() + type),
- startVal = defProp($elem);
+ var animTime = 2000;
- $elem[ method ]("fast");
- stop();
+ jQuery.each([ "in", "out" ], function( i, type ) {
+ var $elem = jQuery( "#" + method.toLowerCase() + type ),
+ startVal = defProp( $elem );
- setTimeout(function () {
- $elem.stop();
+ $elem[ method ]( animTime );
+ stop();
- notEqual(defProp($elem), startVal, ".stop() is called about halfway through animation.");
+ setTimeout( function() {
+ $elem.stop();
- $elem[ method ]("fast", function () {
- equal(defProp(jQuery(this)), startVal, "After doing .stop() halfway, check that state has been saved for returning to original property value.");
- start();
- });
- }, 100);
+ notEqual( defProp( $elem ), startVal, ".stop() is called about halfway through animation." );
+
+ $elem[ method ](animTime, function() {
+ equal( defProp( $elem ), startVal, "After doing .stop() halfway through hide, check that state has been saved for returning to original property value." );
+
+ // Start from hidden position to show this time
+ $elem.hide()[ method ]( animTime );
+ setTimeout( function() {
+ $elem.stop();
+
+ notEqual( defProp( $elem ), startVal, ".stop() is called about halfway through animation." );
+
+ $elem[ method ](animTime, function() {
+ equal( defProp( $elem ), startVal, "After doing .stop() halfway through show, check that state has been saved for returning to original property value." );
+
+ // Remove olddisplay data from .hide() call
+ jQuery.removeData( this, "olddisplay", true );
+ start();
+ });
+ }, animTime / 2);
+ });
+ }, animTime / 2);
+ });
});
});
+
+ test("animate with per-property easing", function(){
+
+ expect(5);
+ stop();
+
+ var data = { a:0, b:0, c:0 },
+ _test1_called = false,
+ _test2_called = false,
+ _default_test_called = false,
+ props = {
+ a: [ 100, "_test1" ],
+ b: [ 100, "_test2" ],
+ c: 100
+ };
+
+ jQuery.easing["_test1"] = function(p) {
+ _test1_called = true;
+ return p;
+ };
+
+ jQuery.easing["_test2"] = function(p) {
+ _test2_called = true;
+ return p;
+ };
+
+ jQuery.easing["_default_test"] = function(p) {
+ _default_test_called = true;
+ return p;
+ };
+
+ jQuery(data).animate( props, 400, "_default_test", function(){
+ start();
+
+ ok( _test1_called, "Easing function (_test1) called" );
+ ok( _test2_called, "Easing function (_test2) called" );
+ ok( _default_test_called, "Easing function (_default) called" );
+ equal( props.a[ 1 ], "_test1", "animate does not change original props (per-property easing would be lost)");
+ equal( props.b[ 1 ], "_test2", "animate does not change original props (per-property easing would be lost)");
+ });
+
});
- test("animate with per-property easing", function () {
+ test("animate with CSS shorthand properties", function(){
+ expect(11);
+ stop();
- expect(5);
- stop();
+ var _default_count = 0,
+ _special_count = 0,
+ propsBasic = { "padding": "10 20 30" },
+ propsSpecial = { "padding": [ "1 2 3", "_special" ] };
- var data = { a : 0, b : 0, c : 0 },
- _test1_called = false,
- _test2_called = false,
- _default_test_called = false,
- props = {
- a : [ 100, "_test1" ],
- b : [ 100, "_test2" ],
- c : 100
+ jQuery.easing._default = function(p) {
+ if ( p >= 1 ) {
+ _default_count++;
+ }
+ return p;
};
- jQuery.easing["_test1"] = function (p) {
- _test1_called = true;
- return p;
- };
+ jQuery.easing._special = function(p) {
+ if ( p >= 1 ) {
+ _special_count++;
+ }
+ return p;
+ };
- jQuery.easing["_test2"] = function (p) {
- _test2_called = true;
- return p;
- };
+ jQuery("#foo")
+ .animate( propsBasic, 200, "_default", function() {
+ equal( this.style.paddingTop, "10px", "padding-top was animated" );
+ equal( this.style.paddingLeft, "20px", "padding-left was animated" );
+ equal( this.style.paddingRight, "20px", "padding-right was animated" );
+ equal( this.style.paddingBottom, "30px", "padding-bottom was animated" );
+ equal( _default_count, 4, "per-animation default easing called for each property" );
+ _default_count = 0;
+ })
+ .animate( propsSpecial, 200, "_default", function() {
+ equal( this.style.paddingTop, "1px", "padding-top was animated again" );
+ equal( this.style.paddingLeft, "2px", "padding-left was animated again" );
+ equal( this.style.paddingRight, "2px", "padding-right was animated again" );
+ equal( this.style.paddingBottom, "3px", "padding-bottom was animated again" );
+ equal( _default_count, 0, "per-animation default easing not called" );
+ equal( _special_count, 4, "special easing called for each property" );
+
+ jQuery(this).css("padding", "0");
+ delete jQuery.easing._default;
+ delete jQuery.easing._special;
+ start();
+ });
+ });
- jQuery.easing["_default_test"] = function (p) {
- _default_test_called = true;
- return p;
- };
+ test("hide hidden elements, with animation (bug #7141)", function() {
+ expect(3);
+ QUnit.reset();
+ stop();
+
+ var div = jQuery("
").appendTo("#qunit-fixture");
+ equal( div.css("display"), "none", "Element is hidden by default" );
+ div.hide(1, function () {
+ ok( !jQuery._data(div, "olddisplay"), "olddisplay is undefined after hiding an already-hidden element" );
+ div.show(1, function () {
+ equal( div.css("display"), "block", "Show a double-hidden element" );
+ start();
+ });
+ });
+ });
+
+ test("animate unit-less properties (#4966)", 2, function() {
+ stop();
+ var div = jQuery( "
" ).appendTo( "#qunit-fixture" );
+ equal( div.css( "z-index" ), "0", "z-index is 0" );
+ div.animate({ zIndex: 2 }, function() {
+ equal( div.css( "z-index" ), "2", "z-index is 2" );
+ start();
+ });
+ });
+
+ test( "animate properties missing px w/ opacity as last (#9074)", 2, function() {
+ expect( 6 );
+ stop();
+ var div = jQuery( "
" )
+ .appendTo( "#qunit-fixture" );
+ function cssInt( prop ) {
+ return parseInt( div.css( prop ), 10 );
+ }
+ equal( cssInt( "marginLeft" ), 0, "Margin left is 0" );
+ equal( cssInt( "left" ), 0, "Left is 0" );
+ div.animate({
+ left: 200,
+ marginLeft: 200,
+ opacity: 0
+ }, 2000);
+ setTimeout(function() {
+ var ml = cssInt( "marginLeft" ),
+ l = cssInt( "left" );
+ notEqual( ml, 0, "Margin left is not 0 after partial animate" );
+ notEqual( ml, 200, "Margin left is not 200 after partial animate" );
+ notEqual( l, 0, "Left is not 0 after partial animate" );
+ notEqual( l, 200, "Left is not 200 after partial animate" );
+ div.stop().remove();
+ start();
+ }, 1000);
+ });
+
+ test("callbacks should fire in correct order (#9100)", function() {
+ stop();
+ var a = 1,
+ cb = 0,
+ $lis = jQuery("
").appendTo("#qunit-fixture")
+ // The test will always pass if no properties are animated or if the duration is 0
+ .animate({fontSize: 12}, 13, function() {
+ a *= jQuery(this).data("operation") === "*2" ? 2 : a;
+ cb++;
+ if ( cb === 2 ) {
+ equal( a, 4, "test value has been *2 and _then_ ^2");
+ start();
+ }
+ });
+ });
+
+ asyncTest( "callbacks that throw exceptions will be removed (#5684)", function() {
+ expect( 2 );
+
+ var foo = jQuery( "#foo" );
+
+ function testException() {
+ }
+
+ foo.animate({ height: 1 }, 1, function() {
+ throw new testException();
+ });
+
+ // this test thoroughly abuses undocumented methods - please feel free to update
+ // with any changes internally to these functions.
+
+ // make sure that the standard timer loop will NOT run.
+ jQuery.fx.stop();
+
+ setTimeout(function() {
- jQuery(data).animate(props, 400, "_default_test", function () {
+ // the first call to fx.tick should raise the callback exception
+ raises( jQuery.fx.tick, testException, "Exception was thrown" );
+
+ // the second call shouldn't
+ jQuery.fx.tick();
+
+ ok( true, "Test completed without throwing a second exception" );
+
+ start();
+ }, 1);
+ });
+
+ test("animate will scale margin properties individually", function() {
+ expect( 2 );
+ stop();
+
+ var foo = jQuery( "#foo" ).css({
+ "margin": 0,
+ "marginLeft": 100
+ });
+
+ ok( foo.css( "marginLeft" ) !== foo.css( "marginRight" ), "Sanity Check" );
+
+ foo.animate({
+ "margin": 200
+ }).stop();
+
+ ok( foo.css( "marginLeft") !== foo.css( "marginRight" ), "The margin properties are different");
+
+ // clean up for next test
+ foo.css({
+ "marginLeft": '',
+ "marginRight": '',
+ "marginTop": '',
+ "marginBottom": ''
+ });
start();
+ });
+
+ test("Do not append px to 'fill-opacity' #9548", 1, function() {
+ var $div = jQuery("").appendTo("#qunit-fixture");
+
+ $div.css("fill-opacity", 0).animate({ "fill-opacity": 1.0 }, 0, function () {
+ equal( jQuery(this).css("fill-opacity"), 1, "Do not append px to 'fill-opacity'");
+ $div.remove();
+ });
+ });
+
+// Start 1.8 Animation tests
+ asyncTest( "jQuery.Animation( object, props, opts )", 4, function() {
+ var testObject = {
+ "foo": 0,
+ "bar": 1,
+ "width": 100
+ },
+ testDest = {
+ "foo": 1,
+ "bar": 0,
+ "width": 200
+ };
+
+ var animation = jQuery.Animation( testObject, testDest, { "duration": 1 });
+ animation.done(function() {
+ for ( var prop in testDest ) {
+ equal( testObject[ prop ], testDest[ prop ], "Animated: " + prop );
+ }
+ animation.done(function() {
+ deepEqual( testObject, testDest, "No unexpected properties" );
+ start();
+ });
+ });
+ });
+
+ asyncTest( "Animate Option: step: function( percent, tween )", 1, function() {
+ var counter = {};
+ jQuery( "#foo" ).animate({
+ prop1: 1,
+ prop2: 2,
+ prop3: 3
+ }, {
+ duration: 1,
+ step: function( value, tween ) {
+ var calls = counter[ tween.prop ] = counter[ tween.prop ] || [];
+ // in case this is called multiple times for either, lets store it in
+ // 0 or 1 in the array
+ calls[ value === 0 ? 0 : 1 ] = value;
+ }
+ }).queue( function( next ) {
+ deepEqual( counter, {
+ prop1: [0, 1],
+ prop2: [0, 2],
+ prop3: [0, 3]
+ }, "Step function was called once at 0% and once at 100% for each property");
+ next();
+ start();
+ });
+ });
- ok(_test1_called, "Easing function (_test1) called");
- ok(_test2_called, "Easing function (_test2) called");
- ok(_default_test_called, "Easing function (_default) called");
- equal(props.a[ 1 ], "_test1", "animate does not change original props (per-property easing would be lost)");
- equal(props.b[ 1 ], "_test2", "animate does not change original props (per-property easing would be lost)");
+ asyncTest( "Animate callbacks have correct context", 2, function() {
+ var foo = jQuery( "#foo" );
+ foo.animate({
+ height: 10
+ }, 10, function() {
+ equal( foo[ 0 ], this, "Complete callback after stop(true) `this` is element" );
+ }).stop( true, true );
+ foo.animate({
+ height: 100
+ }, 10, function() {
+ equal( foo[ 0 ], this, "Complete callback `this` is element" );
+ start();
+ });
+ });
+
+ asyncTest( "User supplied callback called after show when fx off (#8892)", 2, function() {
+ var foo = jQuery( "#foo" );
+ jQuery.fx.off = true;
+ foo.hide();
+ foo.fadeIn( 500, function() {
+ ok( jQuery( this ).is( ":visible" ), "Element is visible in callback" );
+ foo.fadeOut( 500, function() {
+ ok( jQuery( this ).is( ":hidden" ), "Element is hidden in callback" );
+ jQuery.fx.off = false;
+ start();
+ });
+ });
});
- });
+ test( "animate should set display for disconnected nodes", function() {
+ expect( 18 );
+
+ var i = 0,
+ methods = {
+ toggle: [ 1 ],
+ slideToggle: [],
+ fadeIn: [],
+ fadeTo: [ "fast", 0.5 ],
+ slideDown: [ "fast" ],
+ show: [ 1 ],
+ animate: [{ width: "show" }]
+ },
+ elems = [
+
+ // parentNode = document fragment
+ jQuery("
test
"),
+
+ // parentNode = null
+ jQuery("
"),
+
+ jQuery('
'),
+
+ jQuery('
')
+ ];
- test("hide hidden elements (bug #7141)", function () {
- expect(3);
- QUnit.reset();
+ strictEqual( elems[ 0 ].show()[ 0 ].style.display, "block", "set display with show() for element with parentNode = document fragment" );
+ strictEqual( elems[ 1 ].show()[ 0 ].style.display, "block", "set display with show() for element with parentNode = null" );
+ strictEqual( elems[ 2 ].show()[ 0 ].style.display, "inline", "show() should not change display if it already set" );
+ strictEqual( elems[ 3 ].show()[ 0 ].style.display, "block", "show() should change display if it already set to none" );
- var div = jQuery("
").appendTo("#qunit-fixture");
- equal(div.css("display"), "none", "Element is hidden by default");
- div.hide();
- ok(!jQuery._data(div, "olddisplay"), "olddisplay is undefined after hiding an already-hidden element");
- div.show();
- equal(div.css("display"), "block", "Show a double-hidden element");
+ // cleanup
+ jQuery.each( elems, function() {
+ jQuery.removeData( this[ 0 ], "olddisplay", true );
+ });
+
+ stop();
+ jQuery.each( methods, function( name, opt ) {
+ jQuery.each([
+
+ // parentNode = document fragment
+ jQuery("
test
"),
+
+ // parentNode = null
+ jQuery("
")
+
+ ], function() {
+ var callback = [function () {
+ strictEqual( this.style.display, "block", "set display to block with " + name );
+
+ jQuery.removeData( this, "olddisplay", true );
- div.remove();
- });
+ if ( ++i === 14 ) {
+ start();
+ }
+ }];
+ jQuery.fn[ name ].apply( this, opt.concat( callback ) );
+ });
+ });
+ });
- test("hide hidden elements, with animation (bug #7141)", function () {
- expect(3);
- QUnit.reset();
- stop();
+ asyncTest("Animation callback should not show animated element as animated (#7157)", 1, function() {
+ var foo = jQuery( "#foo" );
- var div = jQuery("
").appendTo("#qunit-fixture");
- equal(div.css("display"), "none", "Element is hidden by default");
- div.hide(1, function () {
- ok(!jQuery._data(div, "olddisplay"), "olddisplay is undefined after hiding an already-hidden element");
- div.show(1, function () {
- equal(div.css("display"), "block", "Show a double-hidden element");
+ foo.animate({
+ opacity: 0
+ }, 100, function() {
+ ok( !foo.is(':animated'), "The element is not animated" );
start();
});
});
- });
- test("animate unit-less properties (#4966)", 2, function () {
- stop();
- var div = jQuery("
").appendTo("#qunit-fixture");
- equal(div.css("z-index"), "0", "z-index is 0");
- div.animate({ zIndex : 2 }, function () {
- equal(div.css("z-index"), "2", "z-index is 2");
- start();
+ asyncTest( "hide called on element within hidden parent should set display to none (#10045)", 3, function() {
+ var hidden = jQuery(".hidden"),
+ elems = jQuery("
hide
hide0
hide1
");
+
+ hidden.append( elems );
+
+ jQuery.when(
+ elems.eq( 0 ).hide(),
+ elems.eq( 1 ).hide( 0 ),
+ elems.eq( 2 ).hide( 1 )
+ ).done(function() {
+ strictEqual( elems.get( 0 ).style.display, "none", "hide() called on element within hidden parent should set display to none" );
+ strictEqual( elems.get( 1 ).style.display, "none", "hide( 0 ) called on element within hidden parent should set display to none" );
+ strictEqual( elems.get( 2 ).style.display, "none", "hide( 1 ) called on element within hidden parent should set display to none" );
+
+ elems.remove();
+ start();
+ });
+ });
+
+ asyncTest( "hide, fadeOut and slideUp called on element width height and width = 0 should set display to none", 5, function() {
+ var foo = jQuery("#foo"),
+ i = 0,
+ elems = jQuery();
+
+ for ( ; i < 5; i++ ) {
+ elems = elems.add('
');
+ }
+
+ foo.append( elems );
+
+ jQuery.when(
+ elems.eq( 0 ).hide(),
+ elems.eq( 1 ).hide( jQuery.noop ),
+ elems.eq( 2 ).hide( 1 ),
+ elems.eq( 3 ).fadeOut(),
+ elems.eq( 4 ).slideUp()
+ ).done(function() {
+ strictEqual( elems.get( 0 ).style.display, "none", "hide() called on element width height and width = 0 should set display to none" );
+ strictEqual( elems.get( 1 ).style.display, "none",
+ "hide( jQuery.noop ) called on element width height and width = 0 should set display to none" );
+ strictEqual( elems.get( 2 ).style.display, "none", "hide( 1 ) called on element width height and width = 0 should set display to none" );
+ strictEqual( elems.get( 3 ).style.display, "none", "fadeOut() called on element width height and width = 0 should set display to none" );
+ strictEqual( elems.get( 4 ).style.display, "none", "slideUp() called on element width height and width = 0 should set display to none" );
+
+ start();
+ });
});
- });
-
- test("callbacks should fire in correct order (#9100)", function () {
- stop();
- var a = 1,
- cb = 0,
- $lis = jQuery("
").appendTo("#qunit-fixture")
- // The test will always pass if no properties are animated or if the duration is 0
- .animate({fontSize : 12}, 13, function () {
- a *= jQuery(this).data("operation") === "*2" ? 2 : a;
- cb++;
- if (cb === 2) {
- equal(a, 4, "test value has been *2 and _then_ ^2");
+
+ asyncTest( "Handle queue:false promises", 10, function() {
+ var foo = jQuery( "#foo" ).clone().andSelf(),
+ step = 1;
+
+ foo.animate({
+ top: 1
+ }, {
+ duration: 10,
+ queue: false,
+ complete: function() {
+ ok( step++ <= 2, "Step one or two" );
+ }
+ }).animate({
+ bottom: 1
+ }, {
+ duration: 10,
+ complete: function() {
+ ok( step > 2 && step < 5, "Step three or four" );
+ step++;
+ }
+ });
+
+ foo.promise().done( function() {
+ equal( step++, 5, "steps 1-5: queue:false then queue:fx done" );
+ foo.animate({
+ top: 10
+ }, {
+ duration: 10,
+ complete: function() {
+ ok( step > 5 && step < 8, "Step six or seven" );
+ step++;
+ }
+ }).animate({
+ bottom: 10
+ }, {
+ duration: 10,
+ queue: false,
+ complete: function() {
+ ok( step > 7 && step < 10, "Step eight or nine" );
+ step++;
+ }
+ }).promise().done( function() {
+ equal( step++, 10, "steps 6-10: queue:fx then queue:false" );
start();
+ });
+
+ });
+ });
+
+ asyncTest( "multiple unqueued and promise", 4, function() {
+ var foo = jQuery( "#foo" ),
+ step = 1;
+ foo.animate({
+ marginLeft: 300
+ }, {
+ duration: 500,
+ queue: false,
+ complete: function() {
+ strictEqual( step++, 2, "Step 2" );
+ }
+ }).animate({
+ top: 100
+ }, {
+ duration: 1500,
+ queue: false,
+ complete: function() {
+ strictEqual( step++, 3, "Step 3" );
+ }
+ }).animate({}, {
+ duration: 2000,
+ queue: false,
+ complete: function() {
+ // no properties is a non-op and finishes immediately
+ strictEqual( step++, 1, "Step 1" );
}
+ }).promise().done( function() {
+ strictEqual( step++, 4, "Step 4" );
+ start();
});
- });
-
- test("jQuery.stop() on CSS animation", 2, function () {
- stop();
- var div = jQuery("
").appendTo("#qunit-fixture");
- div.animate({ height : 100, width: 150 }, 200);
- setTimeout(function() {
- // Clear the queue and stop
- div.stop();
- ok(div.height() < 100 * 0.95, 'Animation stopped at ' + div.height() + ' before it reached full height of 100');
- ok(div.width() < 150 * 0.95, 'Animation stopped at ' + div.width() + ' before it reached full width of 150');
- start();
- }, 50);
- });
+ });
- test("#36 parameter compatibility", function () {
- var foo = jQuery("#foo");
- foo.animate({ top : 10 });
- });
+ asyncTest( "animate does not change start value for non-px animation (#7109)", 1, function() {
+ var parent = jQuery( "
" ).css({ width: 284, height: 1 }).appendTo( "#qunit-fixture" ),
+ child = parent.children().css({ fontSize: "98.6in", width: "0.01em", height: 1 }),
+ actual = parseFloat( child.css( "width" ) ),
+ computed = [];
- /* As mentioned, thoroughly abuses undocumented methods. Since the overwritten animate doesn't
- * use timers this doesn't need to be tested
- asyncTest("callbacks that throw exceptions will be removed (#5684)", function () {
- expect(2);
+ child.animate({ width: "0%" }, {
+ duration: 1,
+ step: function() {
+ computed.push( parseFloat( child.css( "width" ) ) );
+ }
+ }).queue( function( next ) {
+ var ratio = computed[ 0 ] / actual;
+ ok( ratio > 0.9 && ratio < 1.1 , "Starting width was close enough" );
+ next();
+ parent.remove();
+ start();
+ });
+ });
- var foo = jQuery("#foo").fadeIn()
+ asyncTest( "non-px animation handles non-numeric start (#11971)", 2, function() {
+ var foo = jQuery("#foo"),
+ initial = foo.css("backgroundPositionX");
+
+ if ( initial == null ) {
+ expect(1);
+ ok( true, "Style property not understood" );
+ start();
+ return;
+ }
- function testException() {
- }
+ foo.animate({ backgroundPositionX: "42%" }, {
+ duration: 1,
+ progress: function( anim, percent ) {
+ if ( percent ) {
+ return;
+ }
- foo.animate({ height : 1 }, 1, function () {
- throw new testException;
+ if ( parseFloat( initial ) ) {
+ equal( jQuery.style( this, "backgroundPositionX" ), initial, "Numeric start preserved" );
+ } else {
+ equal( jQuery.style( this, "backgroundPositionX" ), "0%", "Non-numeric start zeroed" );
+ }
+ },
+ done: function() {
+ equal( jQuery.style( this, "backgroundPositionX" ), "42%", "End reached" );
+ start();
+ }
+ });
});
- // this test thoroughly abuses undocumented methods - please feel free to update
- // with any changes internally to these functions.
+ asyncTest("Animation callbacks (#11797)", 15, function() {
+ var targets = jQuery("#foo").children(),
+ done = false,
+ expectedProgress = 0;
+
+ targets.eq( 0 ).animate( {}, {
+ duration: 1,
+ start: function() {
+ ok( true, "empty: start" );
+ },
+ progress: function( anim, percent ) {
+ equal( percent, 0, "empty: progress 0" );
+ },
+ done: function() {
+ ok( true, "empty: done" );
+ },
+ fail: function() {
+ ok( false, "empty: fail" );
+ },
+ always: function() {
+ ok( true, "empty: always" );
+ done = true;
+ }
+ });
- // make sure that the standard timer loop will NOT run.
- jQuery.fx.stop();
+ ok( done, "empty: done immediately" );
+
+ done = false;
+ targets.eq( 1 ).animate({
+ opacity: 0
+ }, {
+ duration: 1,
+ start: function() {
+ ok( true, "stopped: start" );
+ },
+ progress: function( anim, percent ) {
+ equal( percent, 0, "stopped: progress 0" );
+ },
+ done: function() {
+ ok( false, "stopped: done" );
+ },
+ fail: function() {
+ ok( true, "stopped: fail" );
+ },
+ always: function() {
+ ok( true, "stopped: always" );
+ done = true;
+ }
+ }).stop();
+
+ ok( done, "stopped: stopped immediately" );
+
+ targets.eq( 2 ).animate({
+ opacity: 0
+ }, {
+ duration: 1,
+ start: function() {
+ ok( true, "async: start" );
+ },
+ progress: function( anim, percent ) {
+ // occasionally the progress handler is called twice in first frame.... *shrug*
+ if ( percent === 0 && expectedProgress === 1 ) {
+ return;
+ }
+ equal( percent, expectedProgress, "async: progress " + expectedProgress );
+ // once at 0, once at 1
+ expectedProgress++;
+ },
+ done: function() {
+ ok( true, "async: done" );
+ },
+ fail: function() {
+ ok( false, "async: fail" );
+ },
+ always: function() {
+ ok( true, "async: always" );
+ start();
+ }
+ });
+ });
- setTimeout(function () {
+ test( "Animate properly sets overflow hidden when animating width/height (#12117)", 4, function() {
+ jQuery.each( [ "height", "width" ], function( _, prop ) {
+ jQuery.each( [ 100, 0 ], function( _, value ) {
+ var div = jQuery("
"),
+ props = {};
+ props[ prop ] = value;
+ div.animate( props, 1 );
+ equal( div.css( "overflow" ), "hidden",
+ "overflow: hidden set when animating " + prop + " to " + value );
+ div.stop();
+ });
+ });
+ });
- // the first call to fx.tick should raise the callback exception
- raises(jQuery.fx.tick, testException, "Exception was thrown");
+ test( "Animations with 0 duration don't ease (#12273)", 1, function() {
+ jQuery.easing.test = function() {
+ ok( false, "Called easing" );
+ };
- // the second call shouldn't
- jQuery.fx.tick();
+ jQuery( "#foo" ).animate({
+ height: 100
+ }, {
+ duration: 0,
+ easing: "test",
+ complete: function() {
+ equal( jQuery( this ).height(), 100, "Height is 100" );
+ }
+ });
- ok(true, "Test completed without throwing a second exception");
+ delete jQuery.easing.test;
+ });
- start();
- }, 1);
- });
- */
+ } // if ( jQuery.fx )
});
\ No newline at end of file
diff --git a/dom/animate/qunit.html b/dom/animate/qunit.html
index d81d3ee0..afbe596d 100644
--- a/dom/animate/qunit.html
+++ b/dom/animate/qunit.html
@@ -5,7 +5,7 @@
-
+
@@ -15,200 +15,210 @@
+
+
-