aboutsummaryrefslogtreecommitdiffstats
path: root/src/jqLite.js
diff options
context:
space:
mode:
authorIgor Minar2011-09-01 01:57:49 -0700
committerIgor Minar2011-09-01 16:37:08 -0700
commit2a8fe56997fddbad673748ce02abf649a709c4ca (patch)
treedef88fb0f27de54d17315f75da86fe12977eece8 /src/jqLite.js
parent622c3ec97409c67ff316c317771b47880fa5c1e8 (diff)
downloadangular.js-2a8fe56997fddbad673748ce02abf649a709c4ca.tar.bz2
fix(ng:class): make ng:class friendly towards other code adding/removing classes
ng:class as well as ng:class-odd and ng:class-even always reset the class list to whatever it was before compilation, this makes it impossible to create another directive which adds its own classes on the element on which ng:class was applied. the fix simply removes all classes that were added previously by ng:class and add classes that the ng:class expression evaluates to. we can now guarantee that we won't clobber stuff added before or after compilation as long as all class names are unique. in order to implement this I had to beef up jqLite#addClass and jqLite#removeClass to be able to add/remove multiple classes without creating duplicates.
Diffstat (limited to 'src/jqLite.js')
-rw-r--r--src/jqLite.js22
1 files changed, 15 insertions, 7 deletions
diff --git a/src/jqLite.js b/src/jqLite.js
index 8cef64da..122684a5 100644
--- a/src/jqLite.js
+++ b/src/jqLite.js
@@ -155,16 +155,24 @@ function JQLiteHasClass(element, selector, _) {
}
function JQLiteRemoveClass(element, selector) {
- element.className = trim(
- (" " + element.className + " ")
- .replace(/[\n\t]/g, " ")
- .replace(" " + selector + " ", " ")
- );
+ if (selector) {
+ forEach(selector.split(' '), function(cssClass) {
+ element.className = trim(
+ (" " + element.className + " ")
+ .replace(/[\n\t]/g, " ")
+ .replace(" " + trim(cssClass) + " ", " ")
+ );
+ });
+ }
}
function JQLiteAddClass(element, selector) {
- if (selector && !JQLiteHasClass(element, selector)) {
- element.className = trim(element.className + ' ' + selector);
+ if (selector) {
+ forEach(selector.split(' '), function(cssClass) {
+ if (!JQLiteHasClass(element, cssClass)) {
+ element.className = trim(element.className + ' ' + trim(cssClass));
+ }
+ });
}
}