MCPcopy Create free account
hub / github.com/angular-ui/ui-router / resolveElementClasses

Function resolveElementClasses

test/angular/1.4/angular-animate.js:267–323  ·  view source on GitHub ↗
(existing, toAdd, toRemove)

Source from the content-addressed store, hash-verified

265}
266
267function resolveElementClasses(existing, toAdd, toRemove) {
268 var ADD_CLASS = 1;
269 var REMOVE_CLASS = -1;
270
271 var flags = {};
272 existing = splitClassesToLookup(existing);
273
274 toAdd = splitClassesToLookup(toAdd);
275 forEach(toAdd, function(value, key) {
276 flags[key] = ADD_CLASS;
277 });
278
279 toRemove = splitClassesToLookup(toRemove);
280 forEach(toRemove, function(value, key) {
281 flags[key] = flags[key] === ADD_CLASS ? null : REMOVE_CLASS;
282 });
283
284 var classes = {
285 addClass: '',
286 removeClass: ''
287 };
288
289 forEach(flags, function(val, klass) {
290 var prop, allow;
291 if (val === ADD_CLASS) {
292 prop = 'addClass';
293 allow = !existing[klass];
294 } else if (val === REMOVE_CLASS) {
295 prop = 'removeClass';
296 allow = existing[klass];
297 }
298 if (allow) {
299 if (classes[prop].length) {
300 classes[prop] += ' ';
301 }
302 classes[prop] += klass;
303 }
304 });
305
306 function splitClassesToLookup(classes) {
307 if (isString(classes)) {
308 classes = classes.split(' ');
309 }
310
311 var obj = {};
312 forEach(classes, function(klass) {
313 // sometimes the split leaves empty string values
314 // incase extra spaces were applied to the options
315 if (klass.length) {
316 obj[klass] = true;
317 }
318 });
319 return obj;
320 }
321
322 return classes;
323}
324

Callers 1

mergeAnimationDetailsFunction · 0.70

Calls 2

splitClassesToLookupFunction · 0.70
forEachFunction · 0.70

Tested by

no test coverage detected