aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatias Niemelä2013-10-12 12:35:34 -0400
committerMatias Niemelä2013-10-12 19:52:47 -0400
commitcd216c4c30adfebb3ef633f18fab2d98e8c52ebc (patch)
treef2e57be6b76177a803e340e927fadb8d9451640e
parent63c5334c84b7269428c710226764d1f08a36e0d4 (diff)
downloadangular.js-cd216c4c30adfebb3ef633f18fab2d98e8c52ebc.tar.bz2
fix($animate): ensure that a timeStamp is created if not provided by the browser event
Firefox and (sometimes) Opera may not provide a timeStamp value in their event when passed to the event handler. This may cause animations not to close properly. This fix will automatically create a timeStamp value for the event in this situation when missing. Closes #3053
-rw-r--r--src/ngAnimate/animate.js12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/ngAnimate/animate.js b/src/ngAnimate/animate.js
index 18cd1c20..38f8bcb9 100644
--- a/src/ngAnimate/animate.js
+++ b/src/ngAnimate/animate.js
@@ -787,15 +787,15 @@ angular.module('ngAnimate', ['ng'])
function onAnimationProgress(event) {
event.stopPropagation();
var ev = event.originalEvent || event;
+ var timeStamp = ev.$manualTimeStamp || ev.timeStamp || Date.now();
/* $manualTimeStamp is a mocked timeStamp value which is set
* within browserTrigger(). This is only here so that tests can
- * mock animations properly. Real events fallback to event.timeStamp.
- * We're checking to see if the timestamp surpasses the expected delay,
- * but we're using elapsedTime instead of the timestamp on the 2nd
+ * mock animations properly. Real events fallback to event.timeStamp,
+ * or, if they don't, then a timeStamp is automatically created for them.
+ * We're checking to see if the timeStamp surpasses the expected delay,
+ * but we're using elapsedTime instead of the timeStamp on the 2nd
* pre-condition since animations sometimes close off early */
- if((ev.$manualTimeStamp || ev.timeStamp) - startTime >= maxDelayTime &&
- ev.elapsedTime >= maxDuration) {
-
+ if(Math.max(timeStamp - startTime, 0) >= maxDelayTime && ev.elapsedTime >= maxDuration) {
done();
}
}