@@ -9,11 +9,10 @@ function classDirective(name, selector) {
9
9
link : function ( scope , element , attr ) {
10
10
var oldVal ;
11
11
12
- // shortcut: if it is clearly a map of classes do not copy values, they are supposed to be boolean (truly/falsy)
13
- scope [ staticMapClassRegEx . test ( attr [ name ] ) ? '$watchCollection' : '$watch' ] ( attr [ name ] , ngClassWatchAction , true ) ;
12
+ scope . $watch ( ngClassParseClasses , ngClassWatchAction ) ;
14
13
15
14
attr . $observe ( 'class' , function ( value ) {
16
- ngClassWatchAction ( scope . $eval ( attr [ name ] ) ) ;
15
+ ngClassWatchAction ( ngClassParseClasses ( ) ) ;
17
16
} ) ;
18
17
19
18
@@ -22,7 +21,7 @@ function classDirective(name, selector) {
22
21
// jshint bitwise: false
23
22
var mod = $index & 1 ;
24
23
if ( mod !== ( old$index & 1 ) ) {
25
- var classes = arrayClasses ( scope . $eval ( attr [ name ] ) ) ;
24
+ var classes = stringClasses ( scope . $eval ( attr [ name ] ) ) . split ( ' ' ) ;
26
25
mod === selector ?
27
26
addClasses ( classes ) :
28
27
removeClasses ( classes ) ;
@@ -70,17 +69,23 @@ function classDirective(name, selector) {
70
69
}
71
70
}
72
71
72
+ function ngClassParseClasses ( ) {
73
+ var classVal = scope . $eval ( attr [ name ] ) ;
74
+ var classes = stringClasses ( classVal ) ;
75
+ return classes ;
76
+ }
77
+
73
78
function ngClassWatchAction ( newVal ) {
74
79
if ( selector === true || scope . $index % 2 === selector ) {
75
- var newClasses = arrayClasses ( newVal || [ ] ) ;
80
+ var newClasses = newVal . split ( ' ' ) ;
76
81
if ( ! oldVal ) {
77
82
addClasses ( newClasses ) ;
78
- } else if ( ! equals ( newVal , oldVal ) ) {
79
- var oldClasses = arrayClasses ( oldVal ) ;
83
+ } else {
84
+ var oldClasses = oldVal . split ( ' ' ) ;
80
85
updateClasses ( oldClasses , newClasses ) ;
81
86
}
87
+ oldVal = newVal ;
82
88
}
83
- oldVal = shallowCopy ( newVal ) ;
84
89
}
85
90
}
86
91
} ;
@@ -99,24 +104,18 @@ function classDirective(name, selector) {
99
104
return values ;
100
105
}
101
106
102
- function arrayClasses ( classVal ) {
103
- var classes = [ ] ;
107
+ function stringClasses ( classVal ) {
108
+ var classes ;
104
109
if ( isArray ( classVal ) ) {
105
- forEach ( classVal , function ( v ) {
106
- classes = classes . concat ( arrayClasses ( v ) ) ;
107
- } ) ;
110
+ classes = classVal . map ( stringClasses ) . join ( ' ' ) ;
108
111
return classes ;
109
- } else if ( isString ( classVal ) ) {
110
- return classVal . split ( ' ' ) ;
111
112
} else if ( isObject ( classVal ) ) {
112
- forEach ( classVal , function ( v , k ) {
113
- if ( v ) {
114
- classes = classes . concat ( k . split ( ' ' ) ) ;
115
- }
116
- } ) ;
113
+ classes = Object . keys ( classVal ) . filter ( function ( k ) {
114
+ return classVal [ k ] ;
115
+ } ) . join ( ' ' ) ;
117
116
return classes ;
118
117
}
119
- return classVal ;
118
+ return classVal || '' ;
120
119
}
121
120
} ] ;
122
121
}
0 commit comments