(name, selector)
| 20813 | }); |
| 20814 | |
| 20815 | function classDirective(name, selector) { |
| 20816 | name = 'ngClass' + name; |
| 20817 | return ['$animate', function($animate) { |
| 20818 | return { |
| 20819 | restrict: 'AC', |
| 20820 | link: function(scope, element, attr) { |
| 20821 | var oldVal; |
| 20822 | |
| 20823 | scope.$watch(attr[name], ngClassWatchAction, true); |
| 20824 | |
| 20825 | attr.$observe('class', function(value) { |
| 20826 | ngClassWatchAction(scope.$eval(attr[name])); |
| 20827 | }); |
| 20828 | |
| 20829 | |
| 20830 | if (name !== 'ngClass') { |
| 20831 | scope.$watch('$index', function($index, old$index) { |
| 20832 | // jshint bitwise: false |
| 20833 | var mod = $index & 1; |
| 20834 | if (mod !== (old$index & 1)) { |
| 20835 | var classes = arrayClasses(scope.$eval(attr[name])); |
| 20836 | mod === selector ? |
| 20837 | addClasses(classes) : |
| 20838 | removeClasses(classes); |
| 20839 | } |
| 20840 | }); |
| 20841 | } |
| 20842 | |
| 20843 | function addClasses(classes) { |
| 20844 | var newClasses = digestClassCounts(classes, 1); |
| 20845 | attr.$addClass(newClasses); |
| 20846 | } |
| 20847 | |
| 20848 | function removeClasses(classes) { |
| 20849 | var newClasses = digestClassCounts(classes, -1); |
| 20850 | attr.$removeClass(newClasses); |
| 20851 | } |
| 20852 | |
| 20853 | function digestClassCounts(classes, count) { |
| 20854 | var classCounts = element.data('$classCounts') || {}; |
| 20855 | var classesToUpdate = []; |
| 20856 | forEach(classes, function(className) { |
| 20857 | if (count > 0 || classCounts[className]) { |
| 20858 | classCounts[className] = (classCounts[className] || 0) + count; |
| 20859 | if (classCounts[className] === +(count > 0)) { |
| 20860 | classesToUpdate.push(className); |
| 20861 | } |
| 20862 | } |
| 20863 | }); |
| 20864 | element.data('$classCounts', classCounts); |
| 20865 | return classesToUpdate.join(' '); |
| 20866 | } |
| 20867 | |
| 20868 | function updateClasses(oldClasses, newClasses) { |
| 20869 | var toAdd = arrayDifference(newClasses, oldClasses); |
| 20870 | var toRemove = arrayDifference(oldClasses, newClasses); |
| 20871 | toAdd = digestClassCounts(toAdd, 1); |
| 20872 | toRemove = digestClassCounts(toRemove, -1); |
no test coverage detected