(name, selector)
| 17106 | }]; |
| 17107 | |
| 17108 | function classDirective(name, selector) { |
| 17109 | name = 'ngClass' + name; |
| 17110 | return function() { |
| 17111 | return { |
| 17112 | restrict: 'AC', |
| 17113 | link: function(scope, element, attr) { |
| 17114 | var oldVal; |
| 17115 | |
| 17116 | scope.$watch(attr[name], ngClassWatchAction, true); |
| 17117 | |
| 17118 | attr.$observe('class', function(value) { |
| 17119 | ngClassWatchAction(scope.$eval(attr[name])); |
| 17120 | }); |
| 17121 | |
| 17122 | |
| 17123 | if (name !== 'ngClass') { |
| 17124 | scope.$watch('$index', function($index, old$index) { |
| 17125 | // jshint bitwise: false |
| 17126 | var mod = $index & 1; |
| 17127 | if (mod !== old$index & 1) { |
| 17128 | var classes = flattenClasses(scope.$eval(attr[name])); |
| 17129 | mod === selector ? |
| 17130 | attr.$addClass(classes) : |
| 17131 | attr.$removeClass(classes); |
| 17132 | } |
| 17133 | }); |
| 17134 | } |
| 17135 | |
| 17136 | |
| 17137 | function ngClassWatchAction(newVal) { |
| 17138 | if (selector === true || scope.$index % 2 === selector) { |
| 17139 | var newClasses = flattenClasses(newVal || ''); |
| 17140 | if(!oldVal) { |
| 17141 | attr.$addClass(newClasses); |
| 17142 | } else if(!equals(newVal,oldVal)) { |
| 17143 | attr.$updateClass(newClasses, flattenClasses(oldVal)); |
| 17144 | } |
| 17145 | } |
| 17146 | oldVal = copy(newVal); |
| 17147 | } |
| 17148 | |
| 17149 | |
| 17150 | function flattenClasses(classVal) { |
| 17151 | if(isArray(classVal)) { |
| 17152 | return classVal.join(' '); |
| 17153 | } else if (isObject(classVal)) { |
| 17154 | var classes = [], i = 0; |
| 17155 | forEach(classVal, function(v, k) { |
| 17156 | if (v) { |
| 17157 | classes.push(k); |
| 17158 | } |
| 17159 | }); |
| 17160 | return classes.join(' '); |
| 17161 | } |
| 17162 | |
| 17163 | return classVal; |
| 17164 | } |
| 17165 | } |
no test coverage detected
searching dependent graphs…