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

Function classDirective

lib/test/angular/1.5.0/angular.js:23594–23711  ·  view source on GitHub ↗
(name, selector)

Source from the content-addressed store, hash-verified

23592});
23593
23594function classDirective(name, selector) {
23595 name = 'ngClass' + name;
23596 return ['$animate', function($animate) {
23597 return {
23598 restrict: 'AC',
23599 link: function(scope, element, attr) {
23600 var oldVal;
23601
23602 scope.$watch(attr[name], ngClassWatchAction, true);
23603
23604 attr.$observe('class', function(value) {
23605 ngClassWatchAction(scope.$eval(attr[name]));
23606 });
23607
23608
23609 if (name !== 'ngClass') {
23610 scope.$watch('$index', function($index, old$index) {
23611 // jshint bitwise: false
23612 var mod = $index & 1;
23613 if (mod !== (old$index & 1)) {
23614 var classes = arrayClasses(scope.$eval(attr[name]));
23615 mod === selector ?
23616 addClasses(classes) :
23617 removeClasses(classes);
23618 }
23619 });
23620 }
23621
23622 function addClasses(classes) {
23623 var newClasses = digestClassCounts(classes, 1);
23624 attr.$addClass(newClasses);
23625 }
23626
23627 function removeClasses(classes) {
23628 var newClasses = digestClassCounts(classes, -1);
23629 attr.$removeClass(newClasses);
23630 }
23631
23632 function digestClassCounts(classes, count) {
23633 // Use createMap() to prevent class assumptions involving property
23634 // names in Object.prototype
23635 var classCounts = element.data('$classCounts') || createMap();
23636 var classesToUpdate = [];
23637 forEach(classes, function(className) {
23638 if (count > 0 || classCounts[className]) {
23639 classCounts[className] = (classCounts[className] || 0) + count;
23640 if (classCounts[className] === +(count > 0)) {
23641 classesToUpdate.push(className);
23642 }
23643 }
23644 });
23645 element.data('$classCounts', classCounts);
23646 return classesToUpdate.join(' ');
23647 }
23648
23649 function updateClasses(oldClasses, newClasses) {
23650 var toAdd = arrayDifference(newClasses, oldClasses);
23651 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