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

Function classDirective

test/angular/1.3/angular.js:20815–20927  ·  view source on GitHub ↗
(name, selector)

Source from the content-addressed store, hash-verified

20813});
20814
20815function classDirective(name, selector) {
20816 name = 'ngClass' + name;
20817 return ['$animate', function($animate) {
20818 return {
20819 restrict: 'AC',
20820 link: function(scope, element, attr) {
20821 var oldVal;
20822
20823 scope.$watch(attr[name], ngClassWatchAction, true);
20824
20825 attr.$observe('class', function(value) {
20826 ngClassWatchAction(scope.$eval(attr[name]));
20827 });
20828
20829
20830 if (name !== 'ngClass') {
20831 scope.$watch('$index', function($index, old$index) {
20832 // jshint bitwise: false
20833 var mod = $index & 1;
20834 if (mod !== (old$index & 1)) {
20835 var classes = arrayClasses(scope.$eval(attr[name]));
20836 mod === selector ?
20837 addClasses(classes) :
20838 removeClasses(classes);
20839 }
20840 });
20841 }
20842
20843 function addClasses(classes) {
20844 var newClasses = digestClassCounts(classes, 1);
20845 attr.$addClass(newClasses);
20846 }
20847
20848 function removeClasses(classes) {
20849 var newClasses = digestClassCounts(classes, -1);
20850 attr.$removeClass(newClasses);
20851 }
20852
20853 function digestClassCounts(classes, count) {
20854 var classCounts = element.data('$classCounts') || {};
20855 var classesToUpdate = [];
20856 forEach(classes, function(className) {
20857 if (count > 0 || classCounts[className]) {
20858 classCounts[className] = (classCounts[className] || 0) + count;
20859 if (classCounts[className] === +(count > 0)) {
20860 classesToUpdate.push(className);
20861 }
20862 }
20863 });
20864 element.data('$classCounts', classCounts);
20865 return classesToUpdate.join(' ');
20866 }
20867
20868 function updateClasses(oldClasses, newClasses) {
20869 var toAdd = arrayDifference(newClasses, oldClasses);
20870 var toRemove = arrayDifference(oldClasses, newClasses);
20871 toAdd = digestClassCounts(toAdd, 1);
20872 toRemove = digestClassCounts(toRemove, -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