angularjs-rails 1.2.0.rc1 → 1.2.0.rc2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ed6236e90a9d0a7901ae13e8d166f7961ea3886b
4
- data.tar.gz: 9450ef622e231fd2c738891e274247d5a50bc609
3
+ metadata.gz: 60c24156d821e8f99fe877451cabfdb3da9a3840
4
+ data.tar.gz: da2c799f76324b0b429dc3b3f9122a3223ef9ec5
5
5
  SHA512:
6
- metadata.gz: 05f7c565521b38ed210f8a4e972e21e331d8ecede171cae3e48fa5fa08b75362d64808bc4c45ebe6077a604f137228849eb56c5d8736c87344f292eeab297e8f
7
- data.tar.gz: c83a6a5e51c031fd91ea82658357a85966ac1eafe9097203195473487f92b89ca81216a42ab41711bc049b539277defc79f8121103bdb08dab8450b8194a1b7f
6
+ metadata.gz: cd335cd66257312b2975b59ff0e5d3f3e3cf4f58dd32ed144878d8f996634613431b7b1a6799195415368d1c69fe7df9b4440f422284868d114817e697a5aefd
7
+ data.tar.gz: 65630c189cbf97e07f998e8db828927cb40338dc667de06ad27900fc4b79a8886f264e6dc53d7dc330aa688469f6bfcc0315a06f98e028d998755b848df07434
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # angularjs-rails
1
+ # angularjs-rails <a href="http://badge.fury.io/rb/angularjs-rails"><img src="https://badge.fury.io/rb/angularjs-rails@2x.png" alt="Gem Version" height="18"></a>
2
2
 
3
3
  angularjs-rails wraps the [Angular.js](http://angularjs.org) library for use in Rails 3.1 and above. Assets will minify automatically during production.
4
4
 
@@ -30,4 +30,4 @@ And similarly, for optional Angular assets:
30
30
 
31
31
  Every attempt is made to mirror the currently shipping Angular.js version number wherever possible.
32
32
 
33
- The major, minor, and patch version numbers will always represent the Angular.js version.
33
+ The major, minor, and patch version numbers will always represent the Angular.js version.
@@ -1,5 +1,5 @@
1
1
  module AngularJS
2
2
  module Rails
3
- VERSION = "1.2.0.rc1"
3
+ VERSION = "1.2.0.rc2"
4
4
  end
5
5
  end
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.2.0rc1
2
+ * @license AngularJS v1.2.0-rc.2
3
3
  * (c) 2010-2012 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -10,20 +10,15 @@
10
10
  * @name ngAnimate
11
11
  * @description
12
12
  *
13
- * ngAnimate
14
- * =========
13
+ * # ngAnimate
15
14
  *
16
- * The ngAnimate module is an optional module that comes packed with AngularJS that can be included within an AngularJS
17
- * application to provide support for CSS and JavaScript animation hooks.
15
+ * `ngAnimate` is an optional module that provides CSS and JavaScript animation hooks.
18
16
  *
19
- * To make use of animations with AngularJS, the `angular-animate.js` JavaScript file must be included into your application
20
- * and the `ngAnimate` module must be included as a dependency.
17
+ * {@installModule animate}
21
18
  *
22
- * <pre>
23
- * angular.module('App', ['ngAnimate']);
24
- * </pre>
19
+ * # Usage
25
20
  *
26
- * Then, to see animations in action, all that is required is to define the appropriate CSS classes
21
+ * To see animations in action, all that is required is to define the appropriate CSS classes
27
22
  * or to register a JavaScript animation via the $animation service. The directives that support animation automatically are:
28
23
  * `ngRepeat`, `ngInclude`, `ngSwitch`, `ngShow`, `ngHide` and `ngView`. Custom directives can take advantage of animation
29
24
  * by using the `$animate` service.
@@ -53,7 +48,7 @@
53
48
  * -o-transition:0.5s linear all;
54
49
  * transition:0.5s linear all;
55
50
  * }
56
- *
51
+ *
57
52
  * .slide.ng-enter { } /&#42; starting animations for enter &#42;/
58
53
  * .slide.ng-enter-active { } /&#42; terminal animations for enter &#42;/
59
54
  * .slide.ng-leave { } /&#42; starting animations for leave &#42;/
@@ -197,11 +192,13 @@ angular.module('ngAnimate', ['ng'])
197
192
  * @name ngAnimate.$animateProvider
198
193
  * @description
199
194
  *
200
- * The $AnimationProvider provider allows developers to register and access custom JavaScript animations directly inside
195
+ * The `$AnimationProvider` allows developers to register and access custom JavaScript animations directly inside
201
196
  * of a module. When an animation is triggered, the $animate service will query the $animation function to find any
202
197
  * animations that match the provided name value.
203
198
  *
204
- * Please visit the {@link ngAnimate ngAnimate} module overview page learn more about how to use animations in your application.
199
+ * Requires the {@link ngAnimate `ngAnimate`} module to be installed.
200
+ *
201
+ * Please visit the {@link ngAnimate `ngAnimate`} module overview page learn more about how to use animations in your application.
205
202
  *
206
203
  */
207
204
  .config(['$provide', '$animateProvider', function($provide, $animateProvider) {
@@ -211,8 +208,8 @@ angular.module('ngAnimate', ['ng'])
211
208
 
212
209
  var NG_ANIMATE_STATE = '$$ngAnimateState';
213
210
  var rootAnimateState = {running:true};
214
- $provide.decorator('$animate', ['$delegate', '$injector', '$sniffer', '$rootElement', '$timeout',
215
- function($delegate, $injector, $sniffer, $rootElement, $timeout) {
211
+ $provide.decorator('$animate', ['$delegate', '$injector', '$sniffer', '$rootElement', '$timeout', '$rootScope',
212
+ function($delegate, $injector, $sniffer, $rootElement, $timeout, $rootScope) {
216
213
 
217
214
  $rootElement.data(NG_ANIMATE_STATE, rootAnimateState);
218
215
 
@@ -255,7 +252,9 @@ angular.module('ngAnimate', ['ng'])
255
252
  * The `$animate` service is used behind the scenes with pre-existing directives and animation with these directives
256
253
  * will work out of the box without any extra configuration.
257
254
  *
258
- * Please visit the {@link ngAnimate ngAnimate} module overview page learn more about how to use animations in your application.
255
+ * Requires the {@link ngAnimate `ngAnimate`} module to be installed.
256
+ *
257
+ * Please visit the {@link ngAnimate `ngAnimate`} module overview page learn more about how to use animations in your application.
259
258
  *
260
259
  */
261
260
  return {
@@ -275,8 +274,8 @@ angular.module('ngAnimate', ['ng'])
275
274
  * |----------------------------------------------------------------------------------------------|-----------------------------------------------|
276
275
  * | 1. $animate.enter(...) is called | class="my-animation" |
277
276
  * | 2. element is inserted into the parent element or beside the after element | class="my-animation" |
278
- * | 3. the .ng-enter class is added to the element | class="my-animation ng-enter" |
279
- * | 4. $animate runs any JavaScript-defined animations on the element | class="my-animation ng-enter" |
277
+ * | 3. $animate runs any JavaScript-defined animations on the element | class="my-animation" |
278
+ * | 4. the .ng-enter class is added to the element | class="my-animation ng-enter" |
280
279
  * | 5. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-enter" |
281
280
  * | 6. the .ng-enter-active class is added (this triggers the CSS transition/animation) | class="my-animation ng-enter ng-enter-active" |
282
281
  * | 7. $animate waits for X milliseconds for the animation to complete | class="my-animation ng-enter ng-enter-active" |
@@ -290,7 +289,11 @@ angular.module('ngAnimate', ['ng'])
290
289
  */
291
290
  enter : function(element, parent, after, done) {
292
291
  $delegate.enter(element, parent, after);
293
- performAnimation('enter', 'ng-enter', element, parent, after, done);
292
+ $rootScope.$$postDigest(function() {
293
+ performAnimation('enter', 'ng-enter', element, parent, after, function() {
294
+ done && $timeout(done, 0, false);
295
+ });
296
+ });
294
297
  },
295
298
 
296
299
  /**
@@ -308,8 +311,8 @@ angular.module('ngAnimate', ['ng'])
308
311
  * | Animation Step | What the element class attribute looks like |
309
312
  * |----------------------------------------------------------------------------------------------|----------------------------------------------|
310
313
  * | 1. $animate.leave(...) is called | class="my-animation" |
311
- * | 2. the .ng-leave class is added to the element | class="my-animation ng-leave" |
312
- * | 3. $animate runs any JavaScript-defined animations on the element | class="my-animation ng-leave" |
314
+ * | 2. $animate runs any JavaScript-defined animations on the element | class="my-animation" |
315
+ * | 3. the .ng-leave class is added to the element | class="my-animation ng-leave" |
313
316
  * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-leave" |
314
317
  * | 5. the .ng-leave-active class is added (this triggers the CSS transition/animation) | class="my-animation ng-leave ng-leave-active |
315
318
  * | 6. $animate waits for X milliseconds for the animation to complete | class="my-animation ng-leave ng-leave-active |
@@ -321,8 +324,10 @@ angular.module('ngAnimate', ['ng'])
321
324
  * @param {function()=} done callback function that will be called once the animation is complete
322
325
  */
323
326
  leave : function(element, done) {
324
- performAnimation('leave', 'ng-leave', element, null, null, function() {
325
- $delegate.leave(element, done);
327
+ $rootScope.$$postDigest(function() {
328
+ performAnimation('leave', 'ng-leave', element, null, null, function() {
329
+ $delegate.leave(element, done);
330
+ });
326
331
  });
327
332
  },
328
333
 
@@ -343,8 +348,8 @@ angular.module('ngAnimate', ['ng'])
343
348
  * |----------------------------------------------------------------------------------------------|---------------------------------------------|
344
349
  * | 1. $animate.move(...) is called | class="my-animation" |
345
350
  * | 2. element is moved into the parent element or beside the after element | class="my-animation" |
346
- * | 3. the .ng-move class is added to the element | class="my-animation ng-move" |
347
- * | 4. $animate runs any JavaScript-defined animations on the element | class="my-animation ng-move" |
351
+ * | 3. $animate runs any JavaScript-defined animations on the element | class="my-animation" |
352
+ * | 4. the .ng-move class is added to the element | class="my-animation ng-move" |
348
353
  * | 5. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-move" |
349
354
  * | 6. the .ng-move-active class is added (this triggers the CSS transition/animation) | class="my-animation ng-move ng-move-active" |
350
355
  * | 7. $animate waits for X milliseconds for the animation to complete | class="my-animation ng-move ng-move-active" |
@@ -358,7 +363,11 @@ angular.module('ngAnimate', ['ng'])
358
363
  */
359
364
  move : function(element, parent, after, done) {
360
365
  $delegate.move(element, parent, after);
361
- performAnimation('move', 'ng-move', element, null, null, done);
366
+ $rootScope.$$postDigest(function() {
367
+ performAnimation('move', 'ng-move', element, null, null, function() {
368
+ done && $timeout(done, 0, false);
369
+ });
370
+ });
362
371
  },
363
372
 
364
373
  /**
@@ -369,15 +378,16 @@ angular.module('ngAnimate', ['ng'])
369
378
  * @description
370
379
  * Triggers a custom animation event based off the className variable and then attaches the className value to the element as a CSS class.
371
380
  * Unlike the other animation methods, the animate service will suffix the className value with {@type -add} in order to provide
372
- * the animate service the setup and active CSS classes in order to trigger the animation.
381
+ * the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if no CSS transitions
382
+ * or keyframes are defined on the -add CSS class).
373
383
  *
374
384
  * Below is a breakdown of each step that occurs during addClass animation:
375
385
  *
376
386
  * | Animation Step | What the element class attribute looks like |
377
387
  * |------------------------------------------------------------------------------------------------|---------------------------------------------|
378
388
  * | 1. $animate.addClass(element, 'super') is called | class="" |
379
- * | 2. the .super-add class is added to the element | class="super-add" |
380
- * | 3. $animate runs any JavaScript-defined animations on the element | class="super-add" |
389
+ * | 2. $animate runs any JavaScript-defined animations on the element | class="" |
390
+ * | 3. the .super-add class is added to the element | class="super-add" |
381
391
  * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay | class="super-add" |
382
392
  * | 5. the .super-add-active class is added (this triggers the CSS transition/animation) | class="super-add super-add-active" |
383
393
  * | 6. $animate waits for X milliseconds for the animation to complete | class="super-add super-add-active" |
@@ -403,15 +413,16 @@ angular.module('ngAnimate', ['ng'])
403
413
  * @description
404
414
  * Triggers a custom animation event based off the className variable and then removes the CSS class provided by the className value
405
415
  * from the element. Unlike the other animation methods, the animate service will suffix the className value with {@type -remove} in
406
- * order to provide the animate service the setup and active CSS classes in order to trigger the animation.
416
+ * order to provide the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if
417
+ * no CSS transitions or keyframes are defined on the -remove CSS class).
407
418
  *
408
419
  * Below is a breakdown of each step that occurs during removeClass animation:
409
420
  *
410
421
  * | Animation Step | What the element class attribute looks like |
411
422
  * |-----------------------------------------------------------------------------------------------|-------------------------------------------------|
412
423
  * | 1. $animate.removeClass(element, 'super') is called | class="super" |
413
- * | 2. the .super-remove class is added to the element | class="super super-remove" |
414
- * | 3. $animate runs any JavaScript-defined animations on the element | class="super super-remove" |
424
+ * | 2. $animate runs any JavaScript-defined animations on the element | class="super" |
425
+ * | 3. the .super-remove class is added to the element | class="super super-remove" |
415
426
  * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay | class="super super-remove" |
416
427
  * | 5. the .super-remove-active class is added (this triggers the CSS transition/animation) | class="super super-remove super-remove-active" |
417
428
  * | 6. $animate waits for X milliseconds for the animation to complete | class="super super-remove super-remove-active" |
@@ -496,15 +507,6 @@ angular.module('ngAnimate', ['ng'])
496
507
  done:done
497
508
  });
498
509
 
499
- var baseClassName = className;
500
- if(event == 'addClass') {
501
- className = suffixClasses(className, '-add');
502
- } else if(event == 'removeClass') {
503
- className = suffixClasses(className, '-remove');
504
- }
505
-
506
- element.addClass(className);
507
-
508
510
  forEach(animations, function(animation, index) {
509
511
  var fn = function() {
510
512
  progress(index);
@@ -512,7 +514,7 @@ angular.module('ngAnimate', ['ng'])
512
514
 
513
515
  if(animation.start) {
514
516
  if(event == 'addClass' || event == 'removeClass') {
515
- animation.endFn = animation.start(element, baseClassName, fn);
517
+ animation.endFn = animation.start(element, className, fn);
516
518
  } else {
517
519
  animation.endFn = animation.start(element, fn);
518
520
  }
@@ -540,7 +542,6 @@ angular.module('ngAnimate', ['ng'])
540
542
  function done() {
541
543
  if(!done.hasBeenRun) {
542
544
  done.hasBeenRun = true;
543
- element.removeClass(className);
544
545
  element.removeData(NG_ANIMATE_STATE);
545
546
  (onComplete || noop)();
546
547
  }
@@ -551,94 +552,125 @@ angular.module('ngAnimate', ['ng'])
551
552
  $animateProvider.register('', ['$window','$sniffer', '$timeout', function($window, $sniffer, $timeout) {
552
553
  var noop = angular.noop;
553
554
  var forEach = angular.forEach;
555
+
556
+ //one day all browsers will have these properties
557
+ var w3cAnimationProp = 'animation';
558
+ var w3cTransitionProp = 'transition';
559
+
560
+ //but some still use vendor-prefixed styles
561
+ var vendorAnimationProp = $sniffer.vendorPrefix + 'Animation';
562
+ var vendorTransitionProp = $sniffer.vendorPrefix + 'Transition';
563
+
564
+ var durationKey = 'Duration',
565
+ delayKey = 'Delay',
566
+ propertyKey = 'Property',
567
+ animationIterationCountKey = 'IterationCount',
568
+ ELEMENT_NODE = 1;
569
+
554
570
  function animate(element, className, done) {
555
571
  if (!($sniffer.transitions || $sniffer.animations)) {
556
572
  done();
557
- } else {
558
- var activeClassName = '';
559
- $timeout(startAnimation, 1, false);
560
-
561
- //this acts as the cancellation function in case
562
- //a new animation is triggered while another animation
563
- //is still going on (otherwise the active className
564
- //would still hang around until the timer is complete).
565
- return onEnd;
573
+ return;
566
574
  }
567
-
568
- function parseMaxTime(str) {
569
- var total = 0, values = angular.isString(str) ? str.split(/\s*,\s*/) : [];
570
- forEach(values, function(value) {
571
- total = Math.max(parseFloat(value) || 0, total);
575
+ else if(['ng-enter','ng-leave','ng-move'].indexOf(className) == -1) {
576
+ var existingDuration = 0;
577
+ forEach(element, function(element) {
578
+ if (element.nodeType == ELEMENT_NODE) {
579
+ var elementStyles = $window.getComputedStyle(element) || {};
580
+ existingDuration = Math.max(parseMaxTime(elementStyles[w3cTransitionProp + durationKey]),
581
+ parseMaxTime(elementStyles[vendorTransitionProp + durationKey]),
582
+ existingDuration);
583
+ }
572
584
  });
573
- return total;
585
+ if(existingDuration > 0) {
586
+ done();
587
+ return;
588
+ }
574
589
  }
575
590
 
576
- function startAnimation() {
577
- var duration = 0;
578
- forEach(className.split(' '), function(klass, i) {
579
- activeClassName += (i > 0 ? ' ' : '') + klass + '-active';
580
- });
581
-
582
- element.addClass(activeClassName);
591
+ element.addClass(className);
583
592
 
584
- //one day all browsers will have these properties
585
- var w3cAnimationProp = 'animation';
586
- var w3cTransitionProp = 'transition';
593
+ //we want all the styles defined before and after
594
+ var duration = 0;
595
+ forEach(element, function(element) {
596
+ if (element.nodeType == ELEMENT_NODE) {
597
+ var elementStyles = $window.getComputedStyle(element) || {};
587
598
 
588
- //but some still use vendor-prefixed styles
589
- var vendorAnimationProp = $sniffer.vendorPrefix + 'Animation';
590
- var vendorTransitionProp = $sniffer.vendorPrefix + 'Transition';
599
+ var transitionDelay = Math.max(parseMaxTime(elementStyles[w3cTransitionProp + delayKey]),
600
+ parseMaxTime(elementStyles[vendorTransitionProp + delayKey]));
591
601
 
592
- var durationKey = 'Duration',
593
- delayKey = 'Delay',
594
- animationIterationCountKey = 'IterationCount';
602
+ var animationDelay = Math.max(parseMaxTime(elementStyles[w3cAnimationProp + delayKey]),
603
+ parseMaxTime(elementStyles[vendorAnimationProp + delayKey]));
595
604
 
596
- //we want all the styles defined before and after
597
- var ELEMENT_NODE = 1;
598
- forEach(element, function(element) {
599
- if (element.nodeType == ELEMENT_NODE) {
600
- var elementStyles = $window.getComputedStyle(element) || {};
605
+ var transitionDuration = Math.max(parseMaxTime(elementStyles[w3cTransitionProp + durationKey]),
606
+ parseMaxTime(elementStyles[vendorTransitionProp + durationKey]));
601
607
 
602
- var transitionDelay = Math.max(parseMaxTime(elementStyles[w3cTransitionProp + delayKey]),
603
- parseMaxTime(elementStyles[vendorTransitionProp + delayKey]));
608
+ var animationDuration = Math.max(parseMaxTime(elementStyles[w3cAnimationProp + durationKey]),
609
+ parseMaxTime(elementStyles[vendorAnimationProp + durationKey]));
604
610
 
605
- var animationDelay = Math.max(parseMaxTime(elementStyles[w3cAnimationProp + delayKey]),
606
- parseMaxTime(elementStyles[vendorAnimationProp + delayKey]));
611
+ if(animationDuration > 0) {
612
+ animationDuration *= Math.max(parseInt(elementStyles[w3cAnimationProp + animationIterationCountKey]) || 0,
613
+ parseInt(elementStyles[vendorAnimationProp + animationIterationCountKey]) || 0,
614
+ 1);
615
+ }
607
616
 
608
- var transitionDuration = Math.max(parseMaxTime(elementStyles[w3cTransitionProp + durationKey]),
609
- parseMaxTime(elementStyles[vendorTransitionProp + durationKey]));
617
+ duration = Math.max(animationDelay + animationDuration,
618
+ transitionDelay + transitionDuration,
619
+ duration);
620
+ }
621
+ });
610
622
 
611
- var animationDuration = Math.max(parseMaxTime(elementStyles[w3cAnimationProp + durationKey]),
612
- parseMaxTime(elementStyles[vendorAnimationProp + durationKey]));
623
+ /* there is no point in performing a reflow if the animation
624
+ timeout is empty (this would cause a flicker bug normally
625
+ in the page */
626
+ if(duration > 0) {
627
+ var node = element[0];
613
628
 
614
- if(animationDuration > 0) {
615
- animationDuration *= Math.max(parseInt(elementStyles[w3cAnimationProp + animationIterationCountKey]) || 0,
616
- parseInt(elementStyles[vendorAnimationProp + animationIterationCountKey]) || 0,
617
- 1);
618
- }
629
+ //temporarily disable the transition so that the enter styles
630
+ //don't animate twice (this is here to avoid a bug in Chrome/FF).
631
+ node.style[w3cTransitionProp + propertyKey] = 'none';
632
+ node.style[vendorTransitionProp + propertyKey] = 'none';
619
633
 
620
- duration = Math.max(animationDelay + animationDuration,
621
- transitionDelay + transitionDuration,
622
- duration);
623
- }
634
+ var activeClassName = '';
635
+ forEach(className.split(' '), function(klass, i) {
636
+ activeClassName += (i > 0 ? ' ' : '') + klass + '-active';
624
637
  });
625
638
 
639
+ //this triggers a reflow which allows for the transition animation to kick in
640
+ element.prop('clientWidth');
641
+ node.style[w3cTransitionProp + propertyKey] = '';
642
+ node.style[vendorTransitionProp + propertyKey] = '';
643
+ element.addClass(activeClassName);
644
+
626
645
  $timeout(done, duration * 1000, false);
627
- }
628
646
 
629
- //this will automatically be called by $animate so
630
- //there is no need to attach this internally to the
631
- //timeout done method
632
- function onEnd(cancelled) {
633
- element.removeClass(activeClassName);
647
+ //this will automatically be called by $animate so
648
+ //there is no need to attach this internally to the
649
+ //timeout done method
650
+ return function onEnd(cancelled) {
651
+ element.removeClass(className);
652
+ element.removeClass(activeClassName);
634
653
 
635
- //only when the animation is cancelled is the done()
636
- //function not called for this animation therefore
637
- //this must be also called
638
- if(cancelled) {
639
- done();
654
+ //only when the animation is cancelled is the done()
655
+ //function not called for this animation therefore
656
+ //this must be also called
657
+ if(cancelled) {
658
+ done();
659
+ }
640
660
  }
641
661
  }
662
+ else {
663
+ element.removeClass(className);
664
+ done();
665
+ }
666
+
667
+ function parseMaxTime(str) {
668
+ var total = 0, values = angular.isString(str) ? str.split(/\s*,\s*/) : [];
669
+ forEach(values, function(value) {
670
+ total = Math.max(parseFloat(value) || 0, total);
671
+ });
672
+ return total;
673
+ }
642
674
  }
643
675
 
644
676
  return {
@@ -659,18 +691,17 @@ angular.module('ngAnimate', ['ng'])
659
691
  }
660
692
  };
661
693
 
694
+ function suffixClasses(classes, suffix) {
695
+ var className = '';
696
+ classes = angular.isArray(classes) ? classes : classes.split(/\s+/);
697
+ forEach(classes, function(klass, i) {
698
+ if(klass && klass.length > 0) {
699
+ className += (i > 0 ? ' ' : '') + klass + suffix;
700
+ }
701
+ });
702
+ return className;
703
+ }
662
704
  }]);
663
-
664
- function suffixClasses(classes, suffix) {
665
- var className = '';
666
- classes = angular.isArray(classes) ? classes : classes.split(/\s+/);
667
- forEach(classes, function(klass, i) {
668
- if(klass && klass.length > 0) {
669
- className += (i > 0 ? ' ' : '') + klass + suffix;
670
- }
671
- });
672
- return className;
673
- }
674
705
  }]);
675
706
 
676
707