MCPcopy Create free account
hub / github.com/bclinkinbeard/angular / classDirective

Function classDirective

test/fixtures/foo.js:18343–18457  ·  view source on GitHub ↗
(name, selector)

Source from the content-addressed store, hash-verified

18341}];
18342
18343function classDirective(name, selector) {
18344 name = 'ngClass' + name;
18345 return ['$animate', function($animate) {
18346 return {
18347 restrict: 'AC',
18348 link: function(scope, element, attr) {
18349 var oldVal;
18350
18351 scope.$watch(attr[name], ngClassWatchAction, true);
18352
18353 attr.$observe('class', function(value) {
18354 ngClassWatchAction(scope.$eval(attr[name]));
18355 });
18356
18357
18358 if (name !== 'ngClass') {
18359 scope.$watch('$index', function($index, old$index) {
18360 // jshint bitwise: false
18361 var mod = $index & 1;
18362 if (mod !== (old$index & 1)) {
18363 var classes = arrayClasses(scope.$eval(attr[name]));
18364 mod === selector ?
18365 addClasses(classes) :
18366 removeClasses(classes);
18367 }
18368 });
18369 }
18370
18371 function addClasses(classes) {
18372 var newClasses = digestClassCounts(classes, 1);
18373 attr.$addClass(newClasses);
18374 }
18375
18376 function removeClasses(classes) {
18377 var newClasses = digestClassCounts(classes, -1);
18378 attr.$removeClass(newClasses);
18379 }
18380
18381 function digestClassCounts (classes, count) {
18382 var classCounts = element.data('$classCounts') || {};
18383 var classesToUpdate = [];
18384 forEach(classes, function (className) {
18385 if (count > 0 || classCounts[className]) {
18386 classCounts[className] = (classCounts[className] || 0) + count;
18387 if (classCounts[className] === +(count > 0)) {
18388 classesToUpdate.push(className);
18389 }
18390 }
18391 });
18392 element.data('$classCounts', classCounts);
18393 return classesToUpdate.join(' ');
18394 }
18395
18396 function updateClasses (oldClasses, newClasses) {
18397 var toAdd = arrayDifference(newClasses, oldClasses);
18398 var toRemove = arrayDifference(oldClasses, newClasses);
18399 toRemove = digestClassCounts(toRemove, -1);
18400 toAdd = digestClassCounts(toAdd, 1);

Callers 1

foo.jsFile · 0.85

Calls 4

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

Tested by

no test coverage detected