MCPcopy
hub / github.com/angular-ui/ui-router / classDirective

Function classDirective

test/angular/1.4/angular.js:23147–23268  ·  view source on GitHub ↗
(name, selector)

Source from the content-addressed store, hash-verified

23145});
23146
23147function classDirective(name, selector) {
23148 name = 'ngClass' + name;
23149 return ['$animate', function($animate) {
23150 return {
23151 restrict: 'AC',
23152 link: function(scope, element, attr) {
23153 var oldVal;
23154
23155 scope.$watch(attr[name], ngClassWatchAction, true);
23156
23157 attr.$observe('class', function(value) {
23158 ngClassWatchAction(scope.$eval(attr[name]));
23159 });
23160
23161
23162 if (name !== 'ngClass') {
23163 scope.$watch('$index', function($index, old$index) {
23164 // jshint bitwise: false
23165 var mod = $index & 1;
23166 if (mod !== (old$index & 1)) {
23167 var classes = arrayClasses(scope.$eval(attr[name]));
23168 mod === selector ?
23169 addClasses(classes) :
23170 removeClasses(classes);
23171 }
23172 });
23173 }
23174
23175 function addClasses(classes) {
23176 var newClasses = digestClassCounts(classes, 1);
23177 attr.$addClass(newClasses);
23178 }
23179
23180 function removeClasses(classes) {
23181 var newClasses = digestClassCounts(classes, -1);
23182 attr.$removeClass(newClasses);
23183 }
23184
23185 function digestClassCounts(classes, count) {
23186 // Use createMap() to prevent class assumptions involving property
23187 // names in Object.prototype
23188 var classCounts = element.data('$classCounts') || createMap();
23189 var classesToUpdate = [];
23190 forEach(classes, function(className) {
23191 if (count > 0 || classCounts[className]) {
23192 classCounts[className] = (classCounts[className] || 0) + count;
23193 if (classCounts[className] === +(count > 0)) {
23194 classesToUpdate.push(className);
23195 }
23196 }
23197 });
23198 element.data('$classCounts', classCounts);
23199 return classesToUpdate.join(' ');
23200 }
23201
23202 function updateClasses(oldClasses, newClasses) {
23203 var toAdd = arrayDifference(newClasses, oldClasses);
23204 var toRemove = arrayDifference(oldClasses, newClasses);

Callers 1

angular.jsFile · 0.70

Calls 4

ngClassWatchActionFunction · 0.70
arrayClassesFunction · 0.70
addClassesFunction · 0.70
removeClassesFunction · 0.70

Tested by

no test coverage detected