MCPcopy Create free account
hub / github.com/cafebazaar/blacksmith / classDirective

Function classDirective

web/static/bower_components/angular/angular.js:22597–22714  ·  view source on GitHub ↗
(name, selector)

Source from the content-addressed store, hash-verified

22595});
22596
22597function classDirective(name, selector) {
22598 name = 'ngClass' + name;
22599 return ['$animate', function($animate) {
22600 return {
22601 restrict: 'AC',
22602 link: function(scope, element, attr) {
22603 var oldVal;
22604
22605 scope.$watch(attr[name], ngClassWatchAction, true);
22606
22607 attr.$observe('class', function(value) {
22608 ngClassWatchAction(scope.$eval(attr[name]));
22609 });
22610
22611
22612 if (name !== 'ngClass') {
22613 scope.$watch('$index', function($index, old$index) {
22614 // jshint bitwise: false
22615 var mod = $index & 1;
22616 if (mod !== (old$index & 1)) {
22617 var classes = arrayClasses(scope.$eval(attr[name]));
22618 mod === selector ?
22619 addClasses(classes) :
22620 removeClasses(classes);
22621 }
22622 });
22623 }
22624
22625 function addClasses(classes) {
22626 var newClasses = digestClassCounts(classes, 1);
22627 attr.$addClass(newClasses);
22628 }
22629
22630 function removeClasses(classes) {
22631 var newClasses = digestClassCounts(classes, -1);
22632 attr.$removeClass(newClasses);
22633 }
22634
22635 function digestClassCounts(classes, count) {
22636 // Use createMap() to prevent class assumptions involving property
22637 // names in Object.prototype
22638 var classCounts = element.data('$classCounts') || createMap();
22639 var classesToUpdate = [];
22640 forEach(classes, function(className) {
22641 if (count > 0 || classCounts[className]) {
22642 classCounts[className] = (classCounts[className] || 0) + count;
22643 if (classCounts[className] === +(count > 0)) {
22644 classesToUpdate.push(className);
22645 }
22646 }
22647 });
22648 element.data('$classCounts', classCounts);
22649 return classesToUpdate.join(' ');
22650 }
22651
22652 function updateClasses(oldClasses, newClasses) {
22653 var toAdd = arrayDifference(newClasses, oldClasses);
22654 var toRemove = arrayDifference(oldClasses, newClasses);

Callers 1

angular.jsFile · 0.85

Calls 4

ngClassWatchActionFunction · 0.85
arrayClassesFunction · 0.85
addClassesFunction · 0.85
removeClassesFunction · 0.85

Tested by

no test coverage detected