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

Function classDirective

test/angular/1.2/angular.js:18538–18652  ·  view source on GitHub ↗
(name, selector)

Source from the content-addressed store, hash-verified

18536}];
18537
18538function classDirective(name, selector) {
18539 name = 'ngClass' + name;
18540 return ['$animate', function($animate) {
18541 return {
18542 restrict: 'AC',
18543 link: function(scope, element, attr) {
18544 var oldVal;
18545
18546 scope.$watch(attr[name], ngClassWatchAction, true);
18547
18548 attr.$observe('class', function(value) {
18549 ngClassWatchAction(scope.$eval(attr[name]));
18550 });
18551
18552
18553 if (name !== 'ngClass') {
18554 scope.$watch('$index', function($index, old$index) {
18555 // jshint bitwise: false
18556 var mod = $index & 1;
18557 if (mod !== (old$index & 1)) {
18558 var classes = arrayClasses(scope.$eval(attr[name]));
18559 mod === selector ?
18560 addClasses(classes) :
18561 removeClasses(classes);
18562 }
18563 });
18564 }
18565
18566 function addClasses(classes) {
18567 var newClasses = digestClassCounts(classes, 1);
18568 attr.$addClass(newClasses);
18569 }
18570
18571 function removeClasses(classes) {
18572 var newClasses = digestClassCounts(classes, -1);
18573 attr.$removeClass(newClasses);
18574 }
18575
18576 function digestClassCounts (classes, count) {
18577 var classCounts = element.data('$classCounts') || {};
18578 var classesToUpdate = [];
18579 forEach(classes, function (className) {
18580 if (count > 0 || classCounts[className]) {
18581 classCounts[className] = (classCounts[className] || 0) + count;
18582 if (classCounts[className] === +(count > 0)) {
18583 classesToUpdate.push(className);
18584 }
18585 }
18586 });
18587 element.data('$classCounts', classCounts);
18588 return classesToUpdate.join(' ');
18589 }
18590
18591 function updateClasses (oldClasses, newClasses) {
18592 var toAdd = arrayDifference(newClasses, oldClasses);
18593 var toRemove = arrayDifference(oldClasses, newClasses);
18594 toRemove = digestClassCounts(toRemove, -1);
18595 toAdd = digestClassCounts(toAdd, 1);

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