MCPcopy
hub / github.com/jquery/esprima / classDirective

Function classDirective

test/3rdparty/angular-1.2.5.js:17108–17168  ·  view source on GitHub ↗
(name, selector)

Source from the content-addressed store, hash-verified

17106}];
17107
17108function classDirective(name, selector) {
17109 name = 'ngClass' + name;
17110 return function() {
17111 return {
17112 restrict: 'AC',
17113 link: function(scope, element, attr) {
17114 var oldVal;
17115
17116 scope.$watch(attr[name], ngClassWatchAction, true);
17117
17118 attr.$observe('class', function(value) {
17119 ngClassWatchAction(scope.$eval(attr[name]));
17120 });
17121
17122
17123 if (name !== 'ngClass') {
17124 scope.$watch('$index', function($index, old$index) {
17125 // jshint bitwise: false
17126 var mod = $index & 1;
17127 if (mod !== old$index & 1) {
17128 var classes = flattenClasses(scope.$eval(attr[name]));
17129 mod === selector ?
17130 attr.$addClass(classes) :
17131 attr.$removeClass(classes);
17132 }
17133 });
17134 }
17135
17136
17137 function ngClassWatchAction(newVal) {
17138 if (selector === true || scope.$index % 2 === selector) {
17139 var newClasses = flattenClasses(newVal || '');
17140 if(!oldVal) {
17141 attr.$addClass(newClasses);
17142 } else if(!equals(newVal,oldVal)) {
17143 attr.$updateClass(newClasses, flattenClasses(oldVal));
17144 }
17145 }
17146 oldVal = copy(newVal);
17147 }
17148
17149
17150 function flattenClasses(classVal) {
17151 if(isArray(classVal)) {
17152 return classVal.join(' ');
17153 } else if (isObject(classVal)) {
17154 var classes = [], i = 0;
17155 forEach(classVal, function(v, k) {
17156 if (v) {
17157 classes.push(k);
17158 }
17159 });
17160 return classes.join(' ');
17161 }
17162
17163 return classVal;
17164 }
17165 }

Callers 1

angular-1.2.5.jsFile · 0.85

Calls 2

ngClassWatchActionFunction · 0.85
flattenClassesFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…