MCPcopy Index your code
hub / github.com/binux/qiandao / classDirective

Function classDirective

web/static/components/angularjs/angular.js:18285–18399  ·  view source on GitHub ↗
(name, selector)

Source from the content-addressed store, hash-verified

18283}];
18284
18285function classDirective(name, selector) {
18286 name = 'ngClass' + name;
18287 return ['$animate', function($animate) {
18288 return {
18289 restrict: 'AC',
18290 link: function(scope, element, attr) {
18291 var oldVal;
18292
18293 scope.$watch(attr[name], ngClassWatchAction, true);
18294
18295 attr.$observe('class', function(value) {
18296 ngClassWatchAction(scope.$eval(attr[name]));
18297 });
18298
18299
18300 if (name !== 'ngClass') {
18301 scope.$watch('$index', function($index, old$index) {
18302 // jshint bitwise: false
18303 var mod = $index & 1;
18304 if (mod !== (old$index & 1)) {
18305 var classes = arrayClasses(scope.$eval(attr[name]));
18306 mod === selector ?
18307 addClasses(classes) :
18308 removeClasses(classes);
18309 }
18310 });
18311 }
18312
18313 function addClasses(classes) {
18314 var newClasses = digestClassCounts(classes, 1);
18315 attr.$addClass(newClasses);
18316 }
18317
18318 function removeClasses(classes) {
18319 var newClasses = digestClassCounts(classes, -1);
18320 attr.$removeClass(newClasses);
18321 }
18322
18323 function digestClassCounts (classes, count) {
18324 var classCounts = element.data('$classCounts') || {};
18325 var classesToUpdate = [];
18326 forEach(classes, function (className) {
18327 if (count > 0 || classCounts[className]) {
18328 classCounts[className] = (classCounts[className] || 0) + count;
18329 if (classCounts[className] === +(count > 0)) {
18330 classesToUpdate.push(className);
18331 }
18332 }
18333 });
18334 element.data('$classCounts', classCounts);
18335 return classesToUpdate.join(' ');
18336 }
18337
18338 function updateClasses (oldClasses, newClasses) {
18339 var toAdd = arrayDifference(newClasses, oldClasses);
18340 var toRemove = arrayDifference(oldClasses, newClasses);
18341 toRemove = digestClassCounts(toRemove, -1);
18342 toAdd = digestClassCounts(toAdd, 1);

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