angularjs-rails 1.4.4 → 1.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/angularjs-rails/version.rb +2 -2
- data/vendor/assets/javascripts/angular-animate.js +266 -123
- data/vendor/assets/javascripts/angular-aria.js +40 -36
- data/vendor/assets/javascripts/angular-cookies.js +2 -2
- data/vendor/assets/javascripts/angular-loader.js +2 -2
- data/vendor/assets/javascripts/angular-message-format.js +1 -1
- data/vendor/assets/javascripts/angular-messages.js +9 -2
- data/vendor/assets/javascripts/angular-mocks.js +62 -25
- data/vendor/assets/javascripts/angular-resource.js +10 -4
- data/vendor/assets/javascripts/angular-route.js +1 -2
- data/vendor/assets/javascripts/angular-sanitize.js +1 -1
- data/vendor/assets/javascripts/angular-scenario.js +625 -325
- data/vendor/assets/javascripts/angular-touch.js +1 -1
- data/vendor/assets/javascripts/angular.js +624 -324
- data/vendor/assets/javascripts/unstable/angular2.js +13370 -14106
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7bae5d9940bff568ab17129d188748335bd1cc9f
|
4
|
+
data.tar.gz: 9a01f2802010654a254df0e1fc59928138aa5a31
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fcf4268bf060a5ab19e0244aa3f1a12e771eca9ed57b25b2dd3edf1f56552d678cc7bf829128df527e185a7f920c2708f30d86497ffe8cb83bfd9781b1d87623
|
7
|
+
data.tar.gz: 6c9efedf3be8ddd17f046264fd67495fb15ffbdd96bff38c66f289f30772e8a15260433c53daa425c7c5adc45fad530435870c82c179ac2d2f8531c6b3be1417
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.4.
|
2
|
+
* @license AngularJS v1.4.7
|
3
3
|
* (c) 2010-2015 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -41,7 +41,7 @@ var CSS_PREFIX = '', TRANSITION_PROP, TRANSITIONEND_EVENT, ANIMATION_PROP, ANIMA
|
|
41
41
|
// Also, the only modern browser that uses vendor prefixes for transitions/keyframes is webkit
|
42
42
|
// therefore there is no reason to test anymore for other vendor prefixes:
|
43
43
|
// http://caniuse.com/#search=transition
|
44
|
-
if (window.ontransitionend
|
44
|
+
if (isUndefined(window.ontransitionend) && isDefined(window.onwebkittransitionend)) {
|
45
45
|
CSS_PREFIX = '-webkit-';
|
46
46
|
TRANSITION_PROP = 'WebkitTransition';
|
47
47
|
TRANSITIONEND_EVENT = 'webkitTransitionEnd transitionend';
|
@@ -50,7 +50,7 @@ if (window.ontransitionend === undefined && window.onwebkittransitionend !== und
|
|
50
50
|
TRANSITIONEND_EVENT = 'transitionend';
|
51
51
|
}
|
52
52
|
|
53
|
-
if (window.onanimationend
|
53
|
+
if (isUndefined(window.onanimationend) && isDefined(window.onwebkitanimationend)) {
|
54
54
|
CSS_PREFIX = '-webkit-';
|
55
55
|
ANIMATION_PROP = 'WebkitAnimation';
|
56
56
|
ANIMATIONEND_EVENT = 'webkitAnimationEnd animationend';
|
@@ -373,11 +373,54 @@ function concatWithSpace(a,b) {
|
|
373
373
|
return a + ' ' + b;
|
374
374
|
}
|
375
375
|
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
376
|
+
var $$rAFSchedulerFactory = ['$$rAF', function($$rAF) {
|
377
|
+
var queue, cancelFn;
|
378
|
+
|
379
|
+
function scheduler(tasks) {
|
380
|
+
// we make a copy since RAFScheduler mutates the state
|
381
|
+
// of the passed in array variable and this would be difficult
|
382
|
+
// to track down on the outside code
|
383
|
+
queue = queue.concat(tasks);
|
384
|
+
nextTick();
|
385
|
+
}
|
386
|
+
|
387
|
+
queue = scheduler.queue = [];
|
388
|
+
|
389
|
+
/* waitUntilQuiet does two things:
|
390
|
+
* 1. It will run the FINAL `fn` value only when an uncancelled RAF has passed through
|
391
|
+
* 2. It will delay the next wave of tasks from running until the quiet `fn` has run.
|
392
|
+
*
|
393
|
+
* The motivation here is that animation code can request more time from the scheduler
|
394
|
+
* before the next wave runs. This allows for certain DOM properties such as classes to
|
395
|
+
* be resolved in time for the next animation to run.
|
396
|
+
*/
|
397
|
+
scheduler.waitUntilQuiet = function(fn) {
|
398
|
+
if (cancelFn) cancelFn();
|
399
|
+
|
400
|
+
cancelFn = $$rAF(function() {
|
401
|
+
cancelFn = null;
|
402
|
+
fn();
|
403
|
+
nextTick();
|
404
|
+
});
|
405
|
+
};
|
406
|
+
|
407
|
+
return scheduler;
|
408
|
+
|
409
|
+
function nextTick() {
|
410
|
+
if (!queue.length) return;
|
411
|
+
|
412
|
+
var items = queue.shift();
|
413
|
+
for (var i = 0; i < items.length; i++) {
|
414
|
+
items[i]();
|
415
|
+
}
|
416
|
+
|
417
|
+
if (!cancelFn) {
|
418
|
+
$$rAF(function() {
|
419
|
+
if (!cancelFn) nextTick();
|
420
|
+
});
|
421
|
+
}
|
422
|
+
}
|
423
|
+
}];
|
381
424
|
|
382
425
|
var $$AnimateChildrenDirective = [function() {
|
383
426
|
return function(scope, element, attrs) {
|
@@ -393,6 +436,8 @@ var $$AnimateChildrenDirective = [function() {
|
|
393
436
|
};
|
394
437
|
}];
|
395
438
|
|
439
|
+
var ANIMATE_TIMER_KEY = '$$animateCss';
|
440
|
+
|
396
441
|
/**
|
397
442
|
* @ngdoc service
|
398
443
|
* @name $animateCss
|
@@ -578,7 +623,7 @@ var $$AnimateChildrenDirective = [function() {
|
|
578
623
|
* * `event` - The DOM event (e.g. enter, leave, move). When used, a generated CSS class of `ng-EVENT` and `ng-EVENT-active` will be applied
|
579
624
|
* to the element during the animation. Multiple events can be provided when spaces are used as a separator. (Note that this will not perform any DOM operation.)
|
580
625
|
* * `easing` - The CSS easing value that will be applied to the transition or keyframe animation (or both).
|
581
|
-
* * `
|
626
|
+
* * `transitionStyle` - The raw CSS transition style that will be used (e.g. `1s linear all`).
|
582
627
|
* * `keyframeStyle` - The raw CSS keyframe animation style that will be used (e.g. `1s my_animation linear`).
|
583
628
|
* * `from` - The starting CSS styles (a key/value object) that will be applied at the start of the animation.
|
584
629
|
* * `to` - The ending CSS styles (a key/value object) that will be applied across the animation via a CSS transition.
|
@@ -595,6 +640,10 @@ var $$AnimateChildrenDirective = [function() {
|
|
595
640
|
* * `staggerIndex` - The numeric index representing the stagger item (e.g. a value of 5 is equal to the sixth item in the stagger; therefore when a
|
596
641
|
* * `stagger` option value of `0.1` is used then there will be a stagger delay of `600ms`)
|
597
642
|
* * `applyClassesEarly` - Whether or not the classes being added or removed will be used when detecting the animation. This is set by `$animate` when enter/leave/move animations are fired to ensure that the CSS classes are resolved in time. (Note that this will prevent any transitions from occuring on the classes being added and removed.)
|
643
|
+
* * `cleanupStyles` - Whether or not the provided `from` and `to` styles will be removed once
|
644
|
+
* the animation is closed. This is useful for when the styles are used purely for the sake of
|
645
|
+
* the animation and do not have a lasting visual effect on the element (e.g. a colapse and open animation).
|
646
|
+
* By default this value is set to `false`.
|
598
647
|
*
|
599
648
|
* @return {object} an object with start and end methods and details about the animation.
|
600
649
|
*
|
@@ -715,12 +764,31 @@ function createLocalCacheLookup() {
|
|
715
764
|
};
|
716
765
|
}
|
717
766
|
|
767
|
+
// we do not reassign an already present style value since
|
768
|
+
// if we detect the style property value again we may be
|
769
|
+
// detecting styles that were added via the `from` styles.
|
770
|
+
// We make use of `isDefined` here since an empty string
|
771
|
+
// or null value (which is what getPropertyValue will return
|
772
|
+
// for a non-existing style) will still be marked as a valid
|
773
|
+
// value for the style (a falsy value implies that the style
|
774
|
+
// is to be removed at the end of the animation). If we had a simple
|
775
|
+
// "OR" statement then it would not be enough to catch that.
|
776
|
+
function registerRestorableStyles(backup, node, properties) {
|
777
|
+
forEach(properties, function(prop) {
|
778
|
+
backup[prop] = isDefined(backup[prop])
|
779
|
+
? backup[prop]
|
780
|
+
: node.style.getPropertyValue(prop);
|
781
|
+
});
|
782
|
+
}
|
783
|
+
|
718
784
|
var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
|
719
785
|
var gcsLookup = createLocalCacheLookup();
|
720
786
|
var gcsStaggerLookup = createLocalCacheLookup();
|
721
787
|
|
722
|
-
this.$get = ['$window', '$$jqLite', '$$AnimateRunner', '$timeout',
|
723
|
-
|
788
|
+
this.$get = ['$window', '$$jqLite', '$$AnimateRunner', '$timeout',
|
789
|
+
'$$forceReflow', '$sniffer', '$$rAFScheduler', '$animate',
|
790
|
+
function($window, $$jqLite, $$AnimateRunner, $timeout,
|
791
|
+
$$forceReflow, $sniffer, $$rAFScheduler, $animate) {
|
724
792
|
|
725
793
|
var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);
|
726
794
|
|
@@ -780,12 +848,8 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
|
|
780
848
|
var cancelLastRAFRequest;
|
781
849
|
var rafWaitQueue = [];
|
782
850
|
function waitUntilQuiet(callback) {
|
783
|
-
if (cancelLastRAFRequest) {
|
784
|
-
cancelLastRAFRequest(); //cancels the request
|
785
|
-
}
|
786
851
|
rafWaitQueue.push(callback);
|
787
|
-
|
788
|
-
cancelLastRAFRequest = null;
|
852
|
+
$$rAFScheduler.waitUntilQuiet(function() {
|
789
853
|
gcsLookup.flush();
|
790
854
|
gcsStaggerLookup.flush();
|
791
855
|
|
@@ -802,8 +866,6 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
|
|
802
866
|
});
|
803
867
|
}
|
804
868
|
|
805
|
-
return init;
|
806
|
-
|
807
869
|
function computeTimings(node, className, cacheKey) {
|
808
870
|
var timings = computeCachedCssStyles(node, className, cacheKey, DETECT_CSS_PROPERTIES);
|
809
871
|
var aD = timings.animationDelay;
|
@@ -818,9 +880,12 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
|
|
818
880
|
return timings;
|
819
881
|
}
|
820
882
|
|
821
|
-
function init(element, options) {
|
883
|
+
return function init(element, options) {
|
884
|
+
var restoreStyles = {};
|
822
885
|
var node = getDomNode(element);
|
823
|
-
if (!node
|
886
|
+
if (!node
|
887
|
+
|| !node.parentNode
|
888
|
+
|| !$animate.enabled()) {
|
824
889
|
return closeAndReturnNoopAnimator();
|
825
890
|
}
|
826
891
|
|
@@ -876,7 +941,6 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
|
|
876
941
|
// there actually is a detected transition or keyframe animation
|
877
942
|
if (options.applyClassesEarly && addRemoveClassName.length) {
|
878
943
|
applyAnimationClasses(element, options);
|
879
|
-
addRemoveClassName = '';
|
880
944
|
}
|
881
945
|
|
882
946
|
var preparationClasses = [structuralClassName, addRemoveClassName].join(' ').trim();
|
@@ -991,6 +1055,18 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
|
|
991
1055
|
return closeAndReturnNoopAnimator();
|
992
1056
|
}
|
993
1057
|
|
1058
|
+
if (options.delay != null) {
|
1059
|
+
var delayStyle = parseFloat(options.delay);
|
1060
|
+
|
1061
|
+
if (flags.applyTransitionDelay) {
|
1062
|
+
temporaryStyles.push(getCssDelayStyle(delayStyle));
|
1063
|
+
}
|
1064
|
+
|
1065
|
+
if (flags.applyAnimationDelay) {
|
1066
|
+
temporaryStyles.push(getCssDelayStyle(delayStyle, true));
|
1067
|
+
}
|
1068
|
+
}
|
1069
|
+
|
994
1070
|
// we need to recalculate the delay value since we used a pre-emptive negative
|
995
1071
|
// delay value and the delay value is required for the final event checking. This
|
996
1072
|
// property will ensure that this will happen after the RAF phase has passed.
|
@@ -1007,7 +1083,12 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
|
|
1007
1083
|
stagger.animationDuration === 0;
|
1008
1084
|
}
|
1009
1085
|
|
1010
|
-
|
1086
|
+
if (options.from) {
|
1087
|
+
if (options.cleanupStyles) {
|
1088
|
+
registerRestorableStyles(restoreStyles, node, Object.keys(options.from));
|
1089
|
+
}
|
1090
|
+
applyAnimationFromStyles(element, options);
|
1091
|
+
}
|
1011
1092
|
|
1012
1093
|
if (flags.blockTransition || flags.blockKeyframeAnimation) {
|
1013
1094
|
applyBlocking(maxDuration);
|
@@ -1074,6 +1155,13 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
|
|
1074
1155
|
applyAnimationClasses(element, options);
|
1075
1156
|
applyAnimationStyles(element, options);
|
1076
1157
|
|
1158
|
+
if (Object.keys(restoreStyles).length) {
|
1159
|
+
forEach(restoreStyles, function(value, prop) {
|
1160
|
+
value ? node.style.setProperty(prop, value)
|
1161
|
+
: node.style.removeProperty(prop);
|
1162
|
+
});
|
1163
|
+
}
|
1164
|
+
|
1077
1165
|
// the reason why we have this option is to allow a synchronous closing callback
|
1078
1166
|
// that is fired as SOON as the animation ends (when the CSS is removed) or if
|
1079
1167
|
// the animation never takes off at all. A good example is a leave animation since
|
@@ -1105,6 +1193,8 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
|
|
1105
1193
|
cancel: cancelFn
|
1106
1194
|
});
|
1107
1195
|
|
1196
|
+
// should flush the cache animation
|
1197
|
+
waitUntilQuiet(noop);
|
1108
1198
|
close();
|
1109
1199
|
|
1110
1200
|
return {
|
@@ -1202,27 +1292,16 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
|
|
1202
1292
|
flags.hasAnimations = timings.animationDuration > 0;
|
1203
1293
|
}
|
1204
1294
|
|
1205
|
-
if (flags.
|
1295
|
+
if (flags.applyAnimationDelay) {
|
1206
1296
|
relativeDelay = typeof options.delay !== "boolean" && truthyTimingValue(options.delay)
|
1207
1297
|
? parseFloat(options.delay)
|
1208
1298
|
: relativeDelay;
|
1209
1299
|
|
1210
1300
|
maxDelay = Math.max(relativeDelay, 0);
|
1211
|
-
|
1212
|
-
|
1213
|
-
|
1214
|
-
|
1215
|
-
delayStyle = getCssDelayStyle(relativeDelay);
|
1216
|
-
temporaryStyles.push(delayStyle);
|
1217
|
-
node.style[delayStyle[0]] = delayStyle[1];
|
1218
|
-
}
|
1219
|
-
|
1220
|
-
if (flags.applyAnimationDelay) {
|
1221
|
-
timings.animationDelay = relativeDelay;
|
1222
|
-
delayStyle = getCssDelayStyle(relativeDelay, true);
|
1223
|
-
temporaryStyles.push(delayStyle);
|
1224
|
-
node.style[delayStyle[0]] = delayStyle[1];
|
1225
|
-
}
|
1301
|
+
timings.animationDelay = relativeDelay;
|
1302
|
+
delayStyle = getCssDelayStyle(relativeDelay, true);
|
1303
|
+
temporaryStyles.push(delayStyle);
|
1304
|
+
node.style[delayStyle[0]] = delayStyle[1];
|
1226
1305
|
}
|
1227
1306
|
|
1228
1307
|
maxDelayTime = maxDelay * ONE_SECOND;
|
@@ -1251,17 +1330,52 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
|
|
1251
1330
|
}
|
1252
1331
|
|
1253
1332
|
startTime = Date.now();
|
1254
|
-
|
1255
|
-
|
1333
|
+
var timerTime = maxDelayTime + CLOSING_TIME_BUFFER * maxDurationTime;
|
1334
|
+
var endTime = startTime + timerTime;
|
1335
|
+
|
1336
|
+
var animationsData = element.data(ANIMATE_TIMER_KEY) || [];
|
1337
|
+
var setupFallbackTimer = true;
|
1338
|
+
if (animationsData.length) {
|
1339
|
+
var currentTimerData = animationsData[0];
|
1340
|
+
setupFallbackTimer = endTime > currentTimerData.expectedEndTime;
|
1341
|
+
if (setupFallbackTimer) {
|
1342
|
+
$timeout.cancel(currentTimerData.timer);
|
1343
|
+
} else {
|
1344
|
+
animationsData.push(close);
|
1345
|
+
}
|
1346
|
+
}
|
1347
|
+
|
1348
|
+
if (setupFallbackTimer) {
|
1349
|
+
var timer = $timeout(onAnimationExpired, timerTime, false);
|
1350
|
+
animationsData[0] = {
|
1351
|
+
timer: timer,
|
1352
|
+
expectedEndTime: endTime
|
1353
|
+
};
|
1354
|
+
animationsData.push(close);
|
1355
|
+
element.data(ANIMATE_TIMER_KEY, animationsData);
|
1356
|
+
}
|
1256
1357
|
|
1257
|
-
|
1358
|
+
element.on(events.join(' '), onAnimationProgress);
|
1359
|
+
if (options.to) {
|
1360
|
+
if (options.cleanupStyles) {
|
1361
|
+
registerRestorableStyles(restoreStyles, node, Object.keys(options.to));
|
1362
|
+
}
|
1363
|
+
applyAnimationToStyles(element, options);
|
1364
|
+
}
|
1258
1365
|
}
|
1259
1366
|
|
1260
1367
|
function onAnimationExpired() {
|
1261
|
-
|
1262
|
-
|
1263
|
-
//
|
1264
|
-
|
1368
|
+
var animationsData = element.data(ANIMATE_TIMER_KEY);
|
1369
|
+
|
1370
|
+
// this will be false in the event that the element was
|
1371
|
+
// removed from the DOM (via a leave animation or something
|
1372
|
+
// similar)
|
1373
|
+
if (animationsData) {
|
1374
|
+
for (var i = 1; i < animationsData.length; i++) {
|
1375
|
+
animationsData[i]();
|
1376
|
+
}
|
1377
|
+
element.removeData(ANIMATE_TIMER_KEY);
|
1378
|
+
}
|
1265
1379
|
}
|
1266
1380
|
|
1267
1381
|
function onAnimationProgress(event) {
|
@@ -1288,7 +1402,7 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
|
|
1288
1402
|
}
|
1289
1403
|
}
|
1290
1404
|
}
|
1291
|
-
}
|
1405
|
+
};
|
1292
1406
|
}];
|
1293
1407
|
}];
|
1294
1408
|
|
@@ -1301,26 +1415,35 @@ var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationPro
|
|
1301
1415
|
var NG_OUT_ANCHOR_CLASS_NAME = 'ng-anchor-out';
|
1302
1416
|
var NG_IN_ANCHOR_CLASS_NAME = 'ng-anchor-in';
|
1303
1417
|
|
1304
|
-
|
1305
|
-
|
1418
|
+
function isDocumentFragment(node) {
|
1419
|
+
return node.parentNode && node.parentNode.nodeType === 11;
|
1420
|
+
}
|
1421
|
+
|
1422
|
+
this.$get = ['$animateCss', '$rootScope', '$$AnimateRunner', '$rootElement', '$sniffer', '$$jqLite', '$document',
|
1423
|
+
function($animateCss, $rootScope, $$AnimateRunner, $rootElement, $sniffer, $$jqLite, $document) {
|
1306
1424
|
|
1307
1425
|
// only browsers that support these properties can render animations
|
1308
1426
|
if (!$sniffer.animations && !$sniffer.transitions) return noop;
|
1309
1427
|
|
1310
|
-
var bodyNode =
|
1428
|
+
var bodyNode = $document[0].body;
|
1311
1429
|
var rootNode = getDomNode($rootElement);
|
1312
1430
|
|
1313
|
-
var rootBodyElement = jqLite(
|
1431
|
+
var rootBodyElement = jqLite(
|
1432
|
+
// this is to avoid using something that exists outside of the body
|
1433
|
+
// we also special case the doc fragement case because our unit test code
|
1434
|
+
// appends the $rootElement to the body after the app has been bootstrapped
|
1435
|
+
isDocumentFragment(rootNode) || bodyNode.contains(rootNode) ? rootNode : bodyNode
|
1436
|
+
);
|
1314
1437
|
|
1315
1438
|
var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);
|
1316
1439
|
|
1317
|
-
return function initDriverFn(animationDetails
|
1440
|
+
return function initDriverFn(animationDetails) {
|
1318
1441
|
return animationDetails.from && animationDetails.to
|
1319
1442
|
? prepareFromToAnchorAnimation(animationDetails.from,
|
1320
1443
|
animationDetails.to,
|
1321
1444
|
animationDetails.classes,
|
1322
1445
|
animationDetails.anchors)
|
1323
|
-
: prepareRegularAnimation(animationDetails
|
1446
|
+
: prepareRegularAnimation(animationDetails);
|
1324
1447
|
};
|
1325
1448
|
|
1326
1449
|
function filterCssClasses(classes) {
|
@@ -1516,21 +1639,14 @@ var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationPro
|
|
1516
1639
|
};
|
1517
1640
|
}
|
1518
1641
|
|
1519
|
-
function prepareRegularAnimation(animationDetails
|
1642
|
+
function prepareRegularAnimation(animationDetails) {
|
1520
1643
|
var element = animationDetails.element;
|
1521
1644
|
var options = animationDetails.options || {};
|
1522
1645
|
|
1523
|
-
// since the ng-EVENT, class-ADD and class-REMOVE classes are applied inside
|
1524
|
-
// of the animateQueue pre and postDigest stages then there is no need to add
|
1525
|
-
// then them here as well.
|
1526
|
-
options.$$skipPreparationClasses = true;
|
1527
|
-
|
1528
|
-
// during the pre/post digest stages inside of animateQueue we also performed
|
1529
|
-
// the blocking (transition:-9999s) so there is no point in doing that again.
|
1530
|
-
options.skipBlocking = true;
|
1531
|
-
|
1532
1646
|
if (animationDetails.structural) {
|
1533
1647
|
options.event = animationDetails.event;
|
1648
|
+
options.structural = true;
|
1649
|
+
options.applyClassesEarly = true;
|
1534
1650
|
|
1535
1651
|
// we special case the leave animation since we want to ensure that
|
1536
1652
|
// the element is removed as soon as the animation is over. Otherwise
|
@@ -1540,11 +1656,6 @@ var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationPro
|
|
1540
1656
|
}
|
1541
1657
|
}
|
1542
1658
|
|
1543
|
-
// we apply the classes right away since the pre-digest took care of the
|
1544
|
-
// preparation classes.
|
1545
|
-
onBeforeClassesAppliedCb(element);
|
1546
|
-
applyAnimationClasses(element, options);
|
1547
|
-
|
1548
1659
|
// We assign the preparationClasses as the actual animation event since
|
1549
1660
|
// the internals of $animateCss will just suffix the event token values
|
1550
1661
|
// with `-active` to trigger the animation.
|
@@ -1568,8 +1679,8 @@ var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationPro
|
|
1568
1679
|
// by the time...
|
1569
1680
|
|
1570
1681
|
var $$AnimateJsProvider = ['$animateProvider', function($animateProvider) {
|
1571
|
-
this.$get = ['$injector', '$$AnimateRunner', '$$
|
1572
|
-
function($injector, $$AnimateRunner, $$
|
1682
|
+
this.$get = ['$injector', '$$AnimateRunner', '$$jqLite',
|
1683
|
+
function($injector, $$AnimateRunner, $$jqLite) {
|
1573
1684
|
|
1574
1685
|
var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);
|
1575
1686
|
// $animateJs(element, 'enter');
|
@@ -1949,15 +2060,33 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
|
|
1949
2060
|
return (nO.addClass && nO.addClass === cO.removeClass) || (nO.removeClass && nO.removeClass === cO.addClass);
|
1950
2061
|
});
|
1951
2062
|
|
1952
|
-
this.$get = ['$$rAF', '$rootScope', '$rootElement', '$document', '$$
|
2063
|
+
this.$get = ['$$rAF', '$rootScope', '$rootElement', '$document', '$$HashMap',
|
1953
2064
|
'$$animation', '$$AnimateRunner', '$templateRequest', '$$jqLite', '$$forceReflow',
|
1954
|
-
function($$rAF, $rootScope, $rootElement, $document, $$
|
2065
|
+
function($$rAF, $rootScope, $rootElement, $document, $$HashMap,
|
1955
2066
|
$$animation, $$AnimateRunner, $templateRequest, $$jqLite, $$forceReflow) {
|
1956
2067
|
|
1957
2068
|
var activeAnimationsLookup = new $$HashMap();
|
1958
2069
|
var disabledElementsLookup = new $$HashMap();
|
1959
2070
|
var animationsEnabled = null;
|
1960
2071
|
|
2072
|
+
function postDigestTaskFactory() {
|
2073
|
+
var postDigestCalled = false;
|
2074
|
+
return function(fn) {
|
2075
|
+
// we only issue a call to postDigest before
|
2076
|
+
// it has first passed. This prevents any callbacks
|
2077
|
+
// from not firing once the animation has completed
|
2078
|
+
// since it will be out of the digest cycle.
|
2079
|
+
if (postDigestCalled) {
|
2080
|
+
fn();
|
2081
|
+
} else {
|
2082
|
+
$rootScope.$$postDigest(function() {
|
2083
|
+
postDigestCalled = true;
|
2084
|
+
fn();
|
2085
|
+
});
|
2086
|
+
}
|
2087
|
+
};
|
2088
|
+
}
|
2089
|
+
|
1961
2090
|
// Wait until all directive and route-related templates are downloaded and
|
1962
2091
|
// compiled. The $templateRequest.totalPendingRequests variable keeps track of
|
1963
2092
|
// all of the remote templates being currently downloaded. If there are no
|
@@ -2020,14 +2149,6 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
|
|
2020
2149
|
return matches;
|
2021
2150
|
}
|
2022
2151
|
|
2023
|
-
function triggerCallback(event, element, phase, data) {
|
2024
|
-
$$rAF(function() {
|
2025
|
-
forEach(findCallbacks(element, event), function(callback) {
|
2026
|
-
callback(element, phase, data);
|
2027
|
-
});
|
2028
|
-
});
|
2029
|
-
}
|
2030
|
-
|
2031
2152
|
return {
|
2032
2153
|
on: function(event, container, callback) {
|
2033
2154
|
var node = extractElementNode(container);
|
@@ -2122,6 +2243,9 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
|
|
2122
2243
|
// These methods will become available after the digest has passed
|
2123
2244
|
var runner = new $$AnimateRunner();
|
2124
2245
|
|
2246
|
+
// this is used to trigger callbacks in postDigest mode
|
2247
|
+
var runInNextPostDigestOrNow = postDigestTaskFactory();
|
2248
|
+
|
2125
2249
|
if (isArray(options.addClass)) {
|
2126
2250
|
options.addClass = options.addClass.join(' ');
|
2127
2251
|
}
|
@@ -2264,9 +2388,6 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
|
|
2264
2388
|
return runner;
|
2265
2389
|
}
|
2266
2390
|
|
2267
|
-
applyGeneratedPreparationClasses(element, isStructural ? event : null, options);
|
2268
|
-
blockTransitions(node, SAFE_FAST_FORWARD_DURATION_VALUE);
|
2269
|
-
|
2270
2391
|
// the counter keeps track of cancelled animations
|
2271
2392
|
var counter = (existingAnimation.counter || 0) + 1;
|
2272
2393
|
newAnimation.counter = counter;
|
@@ -2325,10 +2446,7 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
|
|
2325
2446
|
: animationDetails.event;
|
2326
2447
|
|
2327
2448
|
markElementAnimationState(element, RUNNING_STATE);
|
2328
|
-
var realRunner = $$animation(element, event, animationDetails.options
|
2329
|
-
$$forceReflow();
|
2330
|
-
blockTransitions(getDomNode(e), false);
|
2331
|
-
});
|
2449
|
+
var realRunner = $$animation(element, event, animationDetails.options);
|
2332
2450
|
|
2333
2451
|
realRunner.done(function(status) {
|
2334
2452
|
close(!status);
|
@@ -2348,7 +2466,20 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
|
|
2348
2466
|
return runner;
|
2349
2467
|
|
2350
2468
|
function notifyProgress(runner, event, phase, data) {
|
2351
|
-
|
2469
|
+
runInNextPostDigestOrNow(function() {
|
2470
|
+
var callbacks = findCallbacks(element, event);
|
2471
|
+
if (callbacks.length) {
|
2472
|
+
// do not optimize this call here to RAF because
|
2473
|
+
// we don't know how heavy the callback code here will
|
2474
|
+
// be and if this code is buffered then this can
|
2475
|
+
// lead to a performance regression.
|
2476
|
+
$$rAF(function() {
|
2477
|
+
forEach(callbacks, function(callback) {
|
2478
|
+
callback(element, phase, data);
|
2479
|
+
});
|
2480
|
+
});
|
2481
|
+
}
|
2482
|
+
});
|
2352
2483
|
runner.progress(event, phase, data);
|
2353
2484
|
}
|
2354
2485
|
|
@@ -2391,7 +2522,8 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
|
|
2391
2522
|
}
|
2392
2523
|
|
2393
2524
|
function areAnimationsAllowed(element, parentElement, event) {
|
2394
|
-
var
|
2525
|
+
var bodyElement = jqLite($document[0].body);
|
2526
|
+
var bodyElementDetected = isMatchingElement(element, bodyElement) || element[0].nodeName === 'HTML';
|
2395
2527
|
var rootElementDetected = isMatchingElement(element, $rootElement);
|
2396
2528
|
var parentAnimationDetected = false;
|
2397
2529
|
var animateChildren;
|
@@ -2447,7 +2579,7 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
|
|
2447
2579
|
if (!bodyElementDetected) {
|
2448
2580
|
// we also need to ensure that the element is or will be apart of the body element
|
2449
2581
|
// otherwise it is pointless to even issue an animation to be rendered
|
2450
|
-
bodyElementDetected = isMatchingElement(parentElement,
|
2582
|
+
bodyElementDetected = isMatchingElement(parentElement, bodyElement);
|
2451
2583
|
}
|
2452
2584
|
|
2453
2585
|
parentElement = parentElement.parent();
|
@@ -2473,19 +2605,34 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
|
|
2473
2605
|
}];
|
2474
2606
|
}];
|
2475
2607
|
|
2476
|
-
var $$
|
2608
|
+
var $$AnimateAsyncRunFactory = ['$$rAF', function($$rAF) {
|
2609
|
+
var waitQueue = [];
|
2610
|
+
|
2611
|
+
function waitForTick(fn) {
|
2612
|
+
waitQueue.push(fn);
|
2613
|
+
if (waitQueue.length > 1) return;
|
2614
|
+
$$rAF(function() {
|
2615
|
+
for (var i = 0; i < waitQueue.length; i++) {
|
2616
|
+
waitQueue[i]();
|
2617
|
+
}
|
2618
|
+
waitQueue = [];
|
2619
|
+
});
|
2620
|
+
}
|
2621
|
+
|
2477
2622
|
return function() {
|
2478
2623
|
var passed = false;
|
2479
|
-
|
2624
|
+
waitForTick(function() {
|
2480
2625
|
passed = true;
|
2481
2626
|
});
|
2482
|
-
return function(
|
2483
|
-
passed ?
|
2627
|
+
return function(callback) {
|
2628
|
+
passed ? callback() : waitForTick(callback);
|
2484
2629
|
};
|
2485
2630
|
};
|
2486
2631
|
}];
|
2487
2632
|
|
2488
|
-
var $$AnimateRunnerFactory = ['$q', '
|
2633
|
+
var $$AnimateRunnerFactory = ['$q', '$sniffer', '$$animateAsyncRun',
|
2634
|
+
function($q, $sniffer, $$animateAsyncRun) {
|
2635
|
+
|
2489
2636
|
var INITIAL_STATE = 0;
|
2490
2637
|
var DONE_PENDING_STATE = 1;
|
2491
2638
|
var DONE_COMPLETE_STATE = 2;
|
@@ -2530,7 +2677,7 @@ var $$AnimateRunnerFactory = ['$q', '$$rAFMutex', function($q, $$rAFMutex) {
|
|
2530
2677
|
this.setHost(host);
|
2531
2678
|
|
2532
2679
|
this._doneCallbacks = [];
|
2533
|
-
this._runInAnimationFrame = $$
|
2680
|
+
this._runInAnimationFrame = $$animateAsyncRun();
|
2534
2681
|
this._state = 0;
|
2535
2682
|
}
|
2536
2683
|
|
@@ -2642,8 +2789,8 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
|
|
2642
2789
|
return element.data(RUNNER_STORAGE_KEY);
|
2643
2790
|
}
|
2644
2791
|
|
2645
|
-
this.$get = ['$$jqLite', '$rootScope', '$injector', '$$AnimateRunner', '$$HashMap',
|
2646
|
-
function($$jqLite, $rootScope, $injector, $$AnimateRunner, $$HashMap) {
|
2792
|
+
this.$get = ['$$jqLite', '$rootScope', '$injector', '$$AnimateRunner', '$$HashMap', '$$rAFScheduler',
|
2793
|
+
function($$jqLite, $rootScope, $injector, $$AnimateRunner, $$HashMap, $$rAFScheduler) {
|
2647
2794
|
|
2648
2795
|
var animationQueue = [];
|
2649
2796
|
var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);
|
@@ -2711,11 +2858,11 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
|
|
2711
2858
|
if (remainingLevelEntries <= 0) {
|
2712
2859
|
remainingLevelEntries = nextLevelEntries;
|
2713
2860
|
nextLevelEntries = 0;
|
2714
|
-
result
|
2861
|
+
result.push(row);
|
2715
2862
|
row = [];
|
2716
2863
|
}
|
2717
2864
|
row.push(entry.fn);
|
2718
|
-
|
2865
|
+
entry.children.forEach(function(childEntry) {
|
2719
2866
|
nextLevelEntries++;
|
2720
2867
|
queue.push(childEntry);
|
2721
2868
|
});
|
@@ -2723,14 +2870,15 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
|
|
2723
2870
|
}
|
2724
2871
|
|
2725
2872
|
if (row.length) {
|
2726
|
-
result
|
2873
|
+
result.push(row);
|
2727
2874
|
}
|
2875
|
+
|
2728
2876
|
return result;
|
2729
2877
|
}
|
2730
2878
|
}
|
2731
2879
|
|
2732
2880
|
// TODO(matsko): document the signature in a better way
|
2733
|
-
return function(element, event, options
|
2881
|
+
return function(element, event, options) {
|
2734
2882
|
options = prepareAnimationOptions(options);
|
2735
2883
|
var isStructural = ['enter', 'move', 'leave'].indexOf(event) >= 0;
|
2736
2884
|
|
@@ -2782,8 +2930,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
|
|
2782
2930
|
// the element was destroyed early on which removed the runner
|
2783
2931
|
// form its storage. This means we can't animate this element
|
2784
2932
|
// at all and it already has been closed due to destruction.
|
2785
|
-
|
2786
|
-
if (getRunner(elm) && getDomNode(elm).parentNode) {
|
2933
|
+
if (getRunner(entry.element)) {
|
2787
2934
|
animations.push(entry);
|
2788
2935
|
} else {
|
2789
2936
|
entry.close();
|
@@ -2814,7 +2961,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
|
|
2814
2961
|
: animationEntry.element;
|
2815
2962
|
|
2816
2963
|
if (getRunner(targetElement)) {
|
2817
|
-
var operation = invokeFirstDriver(animationEntry
|
2964
|
+
var operation = invokeFirstDriver(animationEntry);
|
2818
2965
|
if (operation) {
|
2819
2966
|
startAnimationFn = operation.start;
|
2820
2967
|
}
|
@@ -2834,11 +2981,9 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
|
|
2834
2981
|
});
|
2835
2982
|
|
2836
2983
|
// we need to sort each of the animations in order of parent to child
|
2837
|
-
// relationships. This ensures that the
|
2838
|
-
//
|
2839
|
-
|
2840
|
-
triggerAnimation();
|
2841
|
-
});
|
2984
|
+
// relationships. This ensures that the child classes are applied at the
|
2985
|
+
// right time.
|
2986
|
+
$$rAFScheduler(sortAnimations(toBeSortedAnimations));
|
2842
2987
|
});
|
2843
2988
|
|
2844
2989
|
return runner;
|
@@ -2908,7 +3053,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
|
|
2908
3053
|
var lookupKey = from.animationID.toString();
|
2909
3054
|
if (!anchorGroups[lookupKey]) {
|
2910
3055
|
var group = anchorGroups[lookupKey] = {
|
2911
|
-
|
3056
|
+
structural: true,
|
2912
3057
|
beforeStart: function() {
|
2913
3058
|
fromAnimation.beforeStart();
|
2914
3059
|
toAnimation.beforeStart();
|
@@ -2962,7 +3107,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
|
|
2962
3107
|
return matches.join(' ');
|
2963
3108
|
}
|
2964
3109
|
|
2965
|
-
function invokeFirstDriver(animationDetails
|
3110
|
+
function invokeFirstDriver(animationDetails) {
|
2966
3111
|
// we loop in reverse order since the more general drivers (like CSS and JS)
|
2967
3112
|
// may attempt more elements, but custom drivers are more particular
|
2968
3113
|
for (var i = drivers.length - 1; i >= 0; i--) {
|
@@ -2970,7 +3115,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
|
|
2970
3115
|
if (!$injector.has(driverName)) continue; // TODO(matsko): remove this check
|
2971
3116
|
|
2972
3117
|
var factory = $injector.get(driverName);
|
2973
|
-
var driver = factory(animationDetails
|
3118
|
+
var driver = factory(animationDetails);
|
2974
3119
|
if (driver) {
|
2975
3120
|
return driver;
|
2976
3121
|
}
|
@@ -3025,8 +3170,8 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
|
|
3025
3170
|
|
3026
3171
|
/* global angularAnimateModule: true,
|
3027
3172
|
|
3028
|
-
$$
|
3029
|
-
$$
|
3173
|
+
$$AnimateAsyncRunFactory,
|
3174
|
+
$$rAFSchedulerFactory,
|
3030
3175
|
$$AnimateChildrenDirective,
|
3031
3176
|
$$AnimateRunnerFactory,
|
3032
3177
|
$$AnimateQueueProvider,
|
@@ -3043,7 +3188,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
|
|
3043
3188
|
* @description
|
3044
3189
|
*
|
3045
3190
|
* The `ngAnimate` module provides support for CSS-based animations (keyframes and transitions) as well as JavaScript-based animations via
|
3046
|
-
* callback hooks. Animations are not enabled by default, however, by including `ngAnimate`
|
3191
|
+
* callback hooks. Animations are not enabled by default, however, by including `ngAnimate` the animation hooks are enabled for an Angular app.
|
3047
3192
|
*
|
3048
3193
|
* <div doc-module-components="ngAnimate"></div>
|
3049
3194
|
*
|
@@ -3076,7 +3221,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
|
|
3076
3221
|
* CSS-based animations with ngAnimate are unique since they require no JavaScript code at all. By using a CSS class that we reference between our HTML
|
3077
3222
|
* and CSS code we can create an animation that will be picked up by Angular when an the underlying directive performs an operation.
|
3078
3223
|
*
|
3079
|
-
* The example below shows how an `enter` animation can be made possible on
|
3224
|
+
* The example below shows how an `enter` animation can be made possible on an element using `ng-if`:
|
3080
3225
|
*
|
3081
3226
|
* ```html
|
3082
3227
|
* <div ng-if="bool" class="fade">
|
@@ -3211,8 +3356,8 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
|
|
3211
3356
|
* /* this will have a 100ms delay between each successive leave animation */
|
3212
3357
|
* transition-delay: 0.1s;
|
3213
3358
|
*
|
3214
|
-
* /*
|
3215
|
-
*
|
3359
|
+
* /* As of 1.4.4, this must always be set: it signals ngAnimate
|
3360
|
+
* to not accidentally inherit a delay property from another CSS class */
|
3216
3361
|
* transition-duration: 0s;
|
3217
3362
|
* }
|
3218
3363
|
* .my-animation.ng-enter.ng-enter-active {
|
@@ -3761,16 +3906,14 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
|
|
3761
3906
|
* @description
|
3762
3907
|
* The ngAnimate `$animate` service documentation is the same for the core `$animate` service.
|
3763
3908
|
*
|
3764
|
-
* Click here {@link ng.$animate
|
3909
|
+
* Click here {@link ng.$animate to learn more about animations with `$animate`}.
|
3765
3910
|
*/
|
3766
3911
|
angular.module('ngAnimate', [])
|
3767
|
-
.provider('$$body', $$BodyProvider)
|
3768
|
-
|
3769
3912
|
.directive('ngAnimateChildren', $$AnimateChildrenDirective)
|
3770
|
-
|
3771
|
-
.factory('$$rAFMutex', $$rAFMutexFactory)
|
3913
|
+
.factory('$$rAFScheduler', $$rAFSchedulerFactory)
|
3772
3914
|
|
3773
3915
|
.factory('$$AnimateRunner', $$AnimateRunnerFactory)
|
3916
|
+
.factory('$$animateAsyncRun', $$AnimateAsyncRunFactory)
|
3774
3917
|
|
3775
3918
|
.provider('$$animateQueue', $$AnimateQueueProvider)
|
3776
3919
|
.provider('$$animation', $$AnimationProvider)
|