(name, selector)
| 27904 | */ |
| 27905 | |
| 27906 | function classDirective(name, selector) { |
| 27907 | name = 'ngClass' + name; |
| 27908 | var indexWatchExpression; |
| 27909 | |
| 27910 | return ['$parse', function($parse) { |
| 27911 | return { |
| 27912 | restrict: 'AC', |
| 27913 | link: function(scope, element, attr) { |
| 27914 | var classCounts = element.data('$classCounts'); |
| 27915 | var oldModulo = true; |
| 27916 | var oldClassString; |
| 27917 | |
| 27918 | if (!classCounts) { |
| 27919 | // Use createMap() to prevent class assumptions involving property |
| 27920 | // names in Object.prototype |
| 27921 | classCounts = createMap(); |
| 27922 | element.data('$classCounts', classCounts); |
| 27923 | } |
| 27924 | |
| 27925 | if (name !== 'ngClass') { |
| 27926 | if (!indexWatchExpression) { |
| 27927 | indexWatchExpression = $parse('$index', function moduloTwo($index) { |
| 27928 | // eslint-disable-next-line no-bitwise |
| 27929 | return $index & 1; |
| 27930 | }); |
| 27931 | } |
| 27932 | |
| 27933 | scope.$watch(indexWatchExpression, ngClassIndexWatchAction); |
| 27934 | } |
| 27935 | |
| 27936 | scope.$watch($parse(attr[name], toClassString), ngClassWatchAction); |
| 27937 | |
| 27938 | function addClasses(classString) { |
| 27939 | classString = digestClassCounts(split(classString), 1); |
| 27940 | attr.$addClass(classString); |
| 27941 | } |
| 27942 | |
| 27943 | function removeClasses(classString) { |
| 27944 | classString = digestClassCounts(split(classString), -1); |
| 27945 | attr.$removeClass(classString); |
| 27946 | } |
| 27947 | |
| 27948 | function updateClasses(oldClassString, newClassString) { |
| 27949 | var oldClassArray = split(oldClassString); |
| 27950 | var newClassArray = split(newClassString); |
| 27951 | |
| 27952 | var toRemoveArray = arrayDifference(oldClassArray, newClassArray); |
| 27953 | var toAddArray = arrayDifference(newClassArray, oldClassArray); |
| 27954 | |
| 27955 | var toRemoveString = digestClassCounts(toRemoveArray, -1); |
| 27956 | var toAddString = digestClassCounts(toAddArray, 1); |
| 27957 | |
| 27958 | attr.$addClass(toAddString); |
| 27959 | attr.$removeClass(toRemoveString); |
| 27960 | } |
| 27961 | |
| 27962 | function digestClassCounts(classArray, count) { |
| 27963 | var classesToUpdate = []; |
no test coverage detected