MCPcopy Index your code
hub / github.com/angular-ui/ui-router / classDirective

Function classDirective

test/angular/1.7/angular.js:27841–27976  ·  view source on GitHub ↗
(name, selector)

Source from the content-addressed store, hash-verified

27839*/
27840
27841function classDirective(name, selector) {
27842 name = 'ngClass' + name;
27843 var indexWatchExpression;
27844
27845 return ['$parse', function($parse) {
27846 return {
27847 restrict: 'AC',
27848 link: function(scope, element, attr) {
27849 var classCounts = element.data('$classCounts');
27850 var oldModulo = true;
27851 var oldClassString;
27852
27853 if (!classCounts) {
27854 // Use createMap() to prevent class assumptions involving property
27855 // names in Object.prototype
27856 classCounts = createMap();
27857 element.data('$classCounts', classCounts);
27858 }
27859
27860 if (name !== 'ngClass') {
27861 if (!indexWatchExpression) {
27862 indexWatchExpression = $parse('$index', function moduloTwo($index) {
27863 // eslint-disable-next-line no-bitwise
27864 return $index & 1;
27865 });
27866 }
27867
27868 scope.$watch(indexWatchExpression, ngClassIndexWatchAction);
27869 }
27870
27871 scope.$watch($parse(attr[name], toClassString), ngClassWatchAction);
27872
27873 function addClasses(classString) {
27874 classString = digestClassCounts(split(classString), 1);
27875 attr.$addClass(classString);
27876 }
27877
27878 function removeClasses(classString) {
27879 classString = digestClassCounts(split(classString), -1);
27880 attr.$removeClass(classString);
27881 }
27882
27883 function updateClasses(oldClassString, newClassString) {
27884 var oldClassArray = split(oldClassString);
27885 var newClassArray = split(newClassString);
27886
27887 var toRemoveArray = arrayDifference(oldClassArray, newClassArray);
27888 var toAddArray = arrayDifference(newClassArray, oldClassArray);
27889
27890 var toRemoveString = digestClassCounts(toRemoveArray, -1);
27891 var toAddString = digestClassCounts(toAddArray, 1);
27892
27893 attr.$addClass(toAddString);
27894 attr.$removeClass(toRemoveString);
27895 }
27896
27897 function digestClassCounts(classArray, count) {
27898 var classesToUpdate = [];

Callers 1

angular.jsFile · 0.70

Calls 2

createMapFunction · 0.70
$parseFunction · 0.70

Tested by

no test coverage detected