Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit e7293da

Browse files
refactor($animate): move CSS class update functions out of closure
1 parent c71d414 commit e7293da

File tree

1 file changed

+48
-45
lines changed

1 file changed

+48
-45
lines changed

src/ng/animate.js

+48-45
Original file line numberDiff line numberDiff line change
@@ -105,61 +105,64 @@ var $$CoreAnimateQueueProvider = function() {
105105
}
106106
};
107107

108-
function addRemoveClassesPostDigest(element, add, remove) {
109-
var classVal, data = postDigestQueue.get(element);
110108

111-
if (!data) {
112-
postDigestQueue.put(element, data = {});
113-
postDigestElements.push(element);
109+
function updateData(data, classes, value) {
110+
var changed = false;
111+
if (classes) {
112+
classes = isString(classes) ? classes.split(' ') :
113+
isArray(classes) ? classes : [];
114+
forEach(classes, function(className) {
115+
if (className) {
116+
changed = true;
117+
data[className] = value;
118+
}
119+
});
114120
}
121+
return changed;
122+
}
115123

116-
var updateData = function(classes, value) {
117-
var changed = false;
118-
if (classes) {
119-
classes = isString(classes) ? classes.split(' ') :
120-
isArray(classes) ? classes : [];
121-
forEach(classes, function(className) {
122-
if (className) {
123-
changed = true;
124-
data[className] = value;
124+
function handleCSSClassChanges() {
125+
forEach(postDigestElements, function(element) {
126+
var data = postDigestQueue.get(element);
127+
if (data) {
128+
var existing = splitClasses(element.attr('class'));
129+
var toAdd = '';
130+
var toRemove = '';
131+
forEach(data, function(status, className) {
132+
var hasClass = !!existing[className];
133+
if (status !== hasClass) {
134+
if (status) {
135+
toAdd += (toAdd.length ? ' ' : '') + className;
136+
} else {
137+
toRemove += (toRemove.length ? ' ' : '') + className;
138+
}
125139
}
126140
});
141+
142+
forEach(element, function(elm) {
143+
toAdd && jqLiteAddClass(elm, toAdd);
144+
toRemove && jqLiteRemoveClass(elm, toRemove);
145+
});
146+
postDigestQueue.remove(element);
127147
}
128-
return changed;
129-
};
148+
});
149+
postDigestElements.length = 0;
150+
}
130151

131-
var classesAdded = updateData(add, true);
132-
var classesRemoved = updateData(remove, false);
133-
if ((!classesAdded && !classesRemoved) || postDigestElements.length > 1) return;
134152

135-
$rootScope.$$postDigest(function() {
136-
forEach(postDigestElements, function(element) {
137-
var data = postDigestQueue.get(element);
138-
if (data) {
139-
var existing = splitClasses(element.attr('class'));
140-
var toAdd = '';
141-
var toRemove = '';
142-
forEach(data, function(status, className) {
143-
var hasClass = !!existing[className];
144-
if (status !== hasClass) {
145-
if (status) {
146-
toAdd += (toAdd.length ? ' ' : '') + className;
147-
} else {
148-
toRemove += (toRemove.length ? ' ' : '') + className;
149-
}
150-
}
151-
});
153+
function addRemoveClassesPostDigest(element, add, remove) {
154+
var classVal, data = postDigestQueue.get(element);
152155

153-
forEach(element, function(elm) {
154-
toAdd && jqLiteAddClass(elm, toAdd);
155-
toRemove && jqLiteRemoveClass(elm, toRemove);
156-
});
157-
postDigestQueue.remove(element);
158-
}
159-
});
156+
if (!data) {
157+
postDigestQueue.put(element, data = {});
158+
postDigestElements.push(element);
159+
}
160160

161-
postDigestElements.length = 0;
162-
});
161+
var classesAdded = updateData(data, add, true);
162+
var classesRemoved = updateData(data, remove, false);
163+
if ((!classesAdded && !classesRemoved) || postDigestElements.length > 1) return;
164+
165+
$rootScope.$$postDigest(handleCSSClassChanges);
163166
}
164167
}];
165168
};

0 commit comments

Comments
 (0)