(name, selector)
| 12535 | }]; |
| 12536 | |
| 12537 | function classDirective(name, selector) { |
| 12538 | name = 'ngClass' + name; |
| 12539 | return ngDirective(function(scope, element, attr) { |
| 12540 | var oldVal = undefined; |
| 12541 | |
| 12542 | scope.$watch(attr[name], ngClassWatchAction, true); |
| 12543 | |
| 12544 | attr.$observe('class', function(value) { |
| 12545 | var ngClass = scope.$eval(attr[name]); |
| 12546 | ngClassWatchAction(ngClass, ngClass); |
| 12547 | }); |
| 12548 | |
| 12549 | |
| 12550 | if (name !== 'ngClass') { |
| 12551 | scope.$watch('$index', function($index, old$index) { |
| 12552 | var mod = $index & 1; |
| 12553 | if (mod !== old$index & 1) { |
| 12554 | if (mod === selector) { |
| 12555 | addClass(scope.$eval(attr[name])); |
| 12556 | } else { |
| 12557 | removeClass(scope.$eval(attr[name])); |
| 12558 | } |
| 12559 | } |
| 12560 | }); |
| 12561 | } |
| 12562 | |
| 12563 | |
| 12564 | function ngClassWatchAction(newVal) { |
| 12565 | if (selector === true || scope.$index % 2 === selector) { |
| 12566 | if (oldVal && !equals(newVal,oldVal)) { |
| 12567 | removeClass(oldVal); |
| 12568 | } |
| 12569 | addClass(newVal); |
| 12570 | } |
| 12571 | oldVal = copy(newVal); |
| 12572 | } |
| 12573 | |
| 12574 | |
| 12575 | function removeClass(classVal) { |
| 12576 | if (isObject(classVal) && !isArray(classVal)) { |
| 12577 | classVal = map(classVal, function(v, k) { if (v) return k }); |
| 12578 | } |
| 12579 | element.removeClass(isArray(classVal) ? classVal.join(' ') : classVal); |
| 12580 | } |
| 12581 | |
| 12582 | |
| 12583 | function addClass(classVal) { |
| 12584 | if (isObject(classVal) && !isArray(classVal)) { |
| 12585 | classVal = map(classVal, function(v, k) { if (v) return k }); |
| 12586 | } |
| 12587 | if (classVal) { |
| 12588 | element.addClass(isArray(classVal) ? classVal.join(' ') : classVal); |
| 12589 | } |
| 12590 | } |
| 12591 | }); |
| 12592 | } |
| 12593 | |
| 12594 | /** |
no test coverage detected