MCPcopy Create free account
hub / github.com/angular-ui/ui-router / classDirective

Function classDirective

test/angular/1.5/angular.js:25619–25744  ·  view source on GitHub ↗
(name, selector)

Source from the content-addressed store, hash-verified

25617*/
25618
25619function classDirective(name, selector) {
25620 name = 'ngClass' + name;
25621 return ['$animate', function($animate) {
25622 return {
25623 restrict: 'AC',
25624 link: function(scope, element, attr) {
25625 var oldVal;
25626
25627 attr.$observe('class', function(value) {
25628 ngClassWatchAction(scope.$eval(attr[name]));
25629 });
25630
25631
25632 if (name !== 'ngClass') {
25633 scope.$watch('$index', function($index, old$index) {
25634 /* eslint-disable no-bitwise */
25635 var mod = $index & 1;
25636 if (mod !== (old$index & 1)) {
25637 var classes = arrayClasses(oldVal);
25638 if (mod === selector) {
25639 addClasses(classes);
25640 } else {
25641 removeClasses(classes);
25642 }
25643 }
25644 /* eslint-enable */
25645 });
25646 }
25647
25648 scope.$watch(attr[name], ngClassWatchAction, true);
25649
25650 function addClasses(classes) {
25651 var newClasses = digestClassCounts(classes, 1);
25652 attr.$addClass(newClasses);
25653 }
25654
25655 function removeClasses(classes) {
25656 var newClasses = digestClassCounts(classes, -1);
25657 attr.$removeClass(newClasses);
25658 }
25659
25660 function digestClassCounts(classes, count) {
25661 // Use createMap() to prevent class assumptions involving property
25662 // names in Object.prototype
25663 var classCounts = element.data('$classCounts') || createMap();
25664 var classesToUpdate = [];
25665 forEach(classes, function(className) {
25666 if (count > 0 || classCounts[className]) {
25667 classCounts[className] = (classCounts[className] || 0) + count;
25668 if (classCounts[className] === +(count > 0)) {
25669 classesToUpdate.push(className);
25670 }
25671 }
25672 });
25673 element.data('$classCounts', classCounts);
25674 return classesToUpdate.join(' ');
25675 }
25676

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