MCPcopy Create free account
hub / github.com/EricSimons/ionic-course / classDirective

Function classDirective

code/songhop/www/lib/angular/angular.js:22015–22127  ·  view source on GitHub ↗
(name, selector)

Source from the content-addressed store, hash-verified

22013}];
22014
22015function classDirective(name, selector) {
22016 name = 'ngClass' + name;
22017 return ['$animate', function($animate) {
22018 return {
22019 restrict: 'AC',
22020 link: function(scope, element, attr) {
22021 var oldVal;
22022
22023 scope.$watch(attr[name], ngClassWatchAction, true);
22024
22025 attr.$observe('class', function(value) {
22026 ngClassWatchAction(scope.$eval(attr[name]));
22027 });
22028
22029
22030 if (name !== 'ngClass') {
22031 scope.$watch('$index', function($index, old$index) {
22032 // jshint bitwise: false
22033 var mod = $index & 1;
22034 if (mod !== (old$index & 1)) {
22035 var classes = arrayClasses(scope.$eval(attr[name]));
22036 mod === selector ?
22037 addClasses(classes) :
22038 removeClasses(classes);
22039 }
22040 });
22041 }
22042
22043 function addClasses(classes) {
22044 var newClasses = digestClassCounts(classes, 1);
22045 attr.$addClass(newClasses);
22046 }
22047
22048 function removeClasses(classes) {
22049 var newClasses = digestClassCounts(classes, -1);
22050 attr.$removeClass(newClasses);
22051 }
22052
22053 function digestClassCounts(classes, count) {
22054 var classCounts = element.data('$classCounts') || {};
22055 var classesToUpdate = [];
22056 forEach(classes, function(className) {
22057 if (count > 0 || classCounts[className]) {
22058 classCounts[className] = (classCounts[className] || 0) + count;
22059 if (classCounts[className] === +(count > 0)) {
22060 classesToUpdate.push(className);
22061 }
22062 }
22063 });
22064 element.data('$classCounts', classCounts);
22065 return classesToUpdate.join(' ');
22066 }
22067
22068 function updateClasses(oldClasses, newClasses) {
22069 var toAdd = arrayDifference(newClasses, oldClasses);
22070 var toRemove = arrayDifference(oldClasses, newClasses);
22071 toAdd = digestClassCounts(toAdd, 1);
22072 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