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

Function classDirective

test/angular/1.6/angular.js:26807–26981  ·  view source on GitHub ↗
(name, selector)

Source from the content-addressed store, hash-verified

26805*/
26806
26807function classDirective(name, selector) {
26808 name = 'ngClass' + name;
26809 var indexWatchExpression;
26810
26811 return ['$parse', function($parse) {
26812 return {
26813 restrict: 'AC',
26814 link: function(scope, element, attr) {
26815 var expression = attr[name].trim();
26816 var isOneTime = (expression.charAt(0) === ':') && (expression.charAt(1) === ':');
26817
26818 var watchInterceptor = isOneTime ? toFlatValue : toClassString;
26819 var watchExpression = $parse(expression, watchInterceptor);
26820 var watchAction = isOneTime ? ngClassOneTimeWatchAction : ngClassWatchAction;
26821
26822 var classCounts = element.data('$classCounts');
26823 var oldModulo = true;
26824 var oldClassString;
26825
26826 if (!classCounts) {
26827 // Use createMap() to prevent class assumptions involving property
26828 // names in Object.prototype
26829 classCounts = createMap();
26830 element.data('$classCounts', classCounts);
26831 }
26832
26833 if (name !== 'ngClass') {
26834 if (!indexWatchExpression) {
26835 indexWatchExpression = $parse('$index', function moduloTwo($index) {
26836 // eslint-disable-next-line no-bitwise
26837 return $index & 1;
26838 });
26839 }
26840
26841 scope.$watch(indexWatchExpression, ngClassIndexWatchAction);
26842 }
26843
26844 scope.$watch(watchExpression, watchAction, isOneTime);
26845
26846 function addClasses(classString) {
26847 classString = digestClassCounts(split(classString), 1);
26848 attr.$addClass(classString);
26849 }
26850
26851 function removeClasses(classString) {
26852 classString = digestClassCounts(split(classString), -1);
26853 attr.$removeClass(classString);
26854 }
26855
26856 function updateClasses(oldClassString, newClassString) {
26857 var oldClassArray = split(oldClassString);
26858 var newClassArray = split(newClassString);
26859
26860 var toRemoveArray = arrayDifference(oldClassArray, newClassArray);
26861 var toAddArray = arrayDifference(newClassArray, oldClassArray);
26862
26863 var toRemoveString = digestClassCounts(toRemoveArray, -1);
26864 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