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

Function classDirective

lib/test/angular/1.6.7/angular.js:26426–26600  ·  view source on GitHub ↗
(name, selector)

Source from the content-addressed store, hash-verified

26424*/
26425
26426function classDirective(name, selector) {
26427 name = 'ngClass' + name;
26428 var indexWatchExpression;
26429
26430 return ['$parse', function($parse) {
26431 return {
26432 restrict: 'AC',
26433 link: function(scope, element, attr) {
26434 var expression = attr[name].trim();
26435 var isOneTime = (expression.charAt(0) === ':') && (expression.charAt(1) === ':');
26436
26437 var watchInterceptor = isOneTime ? toFlatValue : toClassString;
26438 var watchExpression = $parse(expression, watchInterceptor);
26439 var watchAction = isOneTime ? ngClassOneTimeWatchAction : ngClassWatchAction;
26440
26441 var classCounts = element.data('$classCounts');
26442 var oldModulo = true;
26443 var oldClassString;
26444
26445 if (!classCounts) {
26446 // Use createMap() to prevent class assumptions involving property
26447 // names in Object.prototype
26448 classCounts = createMap();
26449 element.data('$classCounts', classCounts);
26450 }
26451
26452 if (name !== 'ngClass') {
26453 if (!indexWatchExpression) {
26454 indexWatchExpression = $parse('$index', function moduloTwo($index) {
26455 // eslint-disable-next-line no-bitwise
26456 return $index & 1;
26457 });
26458 }
26459
26460 scope.$watch(indexWatchExpression, ngClassIndexWatchAction);
26461 }
26462
26463 scope.$watch(watchExpression, watchAction, isOneTime);
26464
26465 function addClasses(classString) {
26466 classString = digestClassCounts(split(classString), 1);
26467 attr.$addClass(classString);
26468 }
26469
26470 function removeClasses(classString) {
26471 classString = digestClassCounts(split(classString), -1);
26472 attr.$removeClass(classString);
26473 }
26474
26475 function updateClasses(oldClassString, newClassString) {
26476 var oldClassArray = split(oldClassString);
26477 var newClassArray = split(newClassString);
26478
26479 var toRemoveArray = arrayDifference(oldClassArray, newClassArray);
26480 var toAddArray = arrayDifference(newClassArray, oldClassArray);
26481
26482 var toRemoveString = digestClassCounts(toRemoveArray, -1);
26483 var toAddString = digestClassCounts(toAddArray, 1);

Callers 1

angular.jsFile · 0.70

Calls 2

$parseFunction · 0.70
createMapFunction · 0.70

Tested by

no test coverage detected