@@ -105,61 +105,66 @@ var $$CoreAnimateQueueProvider = function() {
105
105
}
106
106
} ;
107
107
108
- function addRemoveClassesPostDigest ( element , add , remove ) {
109
- var classVal , data = postDigestQueue . get ( element ) ;
110
-
111
- if ( ! data ) {
112
- postDigestQueue . put ( element , data = { } ) ;
113
- postDigestElements . push ( element ) ;
114
- }
115
-
116
- var updateData = function ( classes , value ) {
117
- var changed = false ;
118
- if ( classes ) {
119
- classes = isString ( classes ) ? classes . split ( ' ' ) :
120
- isArray ( classes ) ? classes : [ ] ;
121
- forEach ( classes , function ( className ) {
122
- if ( className ) {
123
- changed = true ;
124
- data [ className ] = value ;
108
+ function handleClassChanges ( ) {
109
+ forEach ( postDigestElements , function ( element ) {
110
+ var data = postDigestQueue . get ( element ) ;
111
+ if ( data ) {
112
+ var existing = splitClasses ( element . attr ( 'class' ) ) ;
113
+ var toAdd = '' ;
114
+ var toRemove = '' ;
115
+ forEach ( data , function ( status , className ) {
116
+ var hasClass = ! ! existing [ className ] ;
117
+ if ( status !== hasClass ) {
118
+ if ( status ) {
119
+ toAdd += ( toAdd . length ? ' ' : '' ) + className ;
120
+ } else {
121
+ toRemove += ( toRemove . length ? ' ' : '' ) + className ;
122
+ }
125
123
}
126
124
} ) ;
125
+
126
+ forEach ( element , function ( elm ) {
127
+ toAdd && jqLiteAddClass ( elm , toAdd ) ;
128
+ toRemove && jqLiteRemoveClass ( elm , toRemove ) ;
129
+ } ) ;
130
+ postDigestQueue . remove ( element ) ;
127
131
}
128
- return changed ;
129
- } ;
130
-
131
- var classesAdded = updateData ( add , true ) ;
132
- var classesRemoved = updateData ( remove , false ) ;
133
- if ( ( ! classesAdded && ! classesRemoved ) || postDigestElements . length > 1 ) return ;
134
-
135
- $rootScope . $$postDigest ( function ( ) {
136
- forEach ( postDigestElements , function ( element ) {
137
- var data = postDigestQueue . get ( element ) ;
138
- if ( data ) {
139
- var existing = splitClasses ( element . attr ( 'class' ) ) ;
140
- var toAdd = '' ;
141
- var toRemove = '' ;
142
- forEach ( data , function ( status , className ) {
143
- var hasClass = ! ! existing [ className ] ;
144
- if ( status !== hasClass ) {
145
- if ( status ) {
146
- toAdd += ( toAdd . length ? ' ' : '' ) + className ;
147
- } else {
148
- toRemove += ( toRemove . length ? ' ' : '' ) + className ;
149
- }
150
- }
151
- } ) ;
132
+ } ) ;
133
+
134
+ postDigestElements . length = 0 ;
135
+ }
152
136
153
- forEach ( element , function ( elm ) {
154
- toAdd && jqLiteAddClass ( elm , toAdd ) ;
155
- toRemove && jqLiteRemoveClass ( elm , toRemove ) ;
156
- } ) ;
157
- postDigestQueue . remove ( element ) ;
137
+ function updateData ( data , classes , value ) {
138
+ var changed = false ;
139
+ if ( classes ) {
140
+ classes = isString ( classes ) ? classes . split ( ' ' ) :
141
+ isArray ( classes ) ? classes : [ ] ;
142
+ forEach ( classes , function ( className ) {
143
+ if ( className ) {
144
+ changed = true ;
145
+ data [ className ] = value ;
158
146
}
159
147
} ) ;
148
+ }
149
+ return changed ;
150
+ }
160
151
161
- postDigestElements . length = 0 ;
162
- } ) ;
152
+ function addRemoveClassesPostDigest ( element , add , remove ) {
153
+ var classVal ,
154
+ data = postDigestQueue . get ( element ) || { } ;
155
+
156
+ var classesAdded = updateData ( data , add , true ) ;
157
+ var classesRemoved = updateData ( data , remove , false ) ;
158
+
159
+ if ( classesAdded || classesRemoved ) {
160
+
161
+ postDigestQueue . put ( element , data ) ;
162
+ postDigestElements . push ( element ) ;
163
+
164
+ if ( postDigestElements . length === 1 ) {
165
+ $rootScope . $$postDigest ( handleClassChanges ) ;
166
+ }
167
+ }
163
168
}
164
169
} ] ;
165
170
} ;
0 commit comments