aboutsummaryrefslogtreecommitdiffstats
path: root/src/Angular.js
diff options
context:
space:
mode:
authorMatias Niemelä2013-11-14 23:45:22 -0500
committerMatias Niemelä2013-11-20 17:15:56 -0500
commit6b8bbe4d90640542eed5607a8c91f6b977b1d6c0 (patch)
tree593e18ea6320f33ec0279f62f0968db74d34e471 /src/Angular.js
parent7067a8fb0b18d5b5489006e1960cee721a88b4d2 (diff)
downloadangular.js-6b8bbe4d90640542eed5607a8c91f6b977b1d6c0.tar.bz2
fix(ngClass): ensure that ngClass only adds/removes the changed classes
ngClass works by removing all the former classes and then adding all the new classes to the element during each watch change operation. This may cause transition animations to never render. The ngClass directive will now only add and remove the classes that change during each watch operation. Closes #4960 Closes #4944
Diffstat (limited to 'src/Angular.js')
-rw-r--r--src/Angular.js24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/Angular.js b/src/Angular.js
index 8409f971..b27f4b06 100644
--- a/src/Angular.js
+++ b/src/Angular.js
@@ -80,7 +80,8 @@
-assertArgFn,
-assertNotHasOwnProperty,
-getter,
- -getBlockElements
+ -getBlockElements,
+ -tokenDifference
*/
@@ -1350,3 +1351,24 @@ function getBlockElements(block) {
return jqLite(elements);
}
+
+/**
+ * Return the string difference between tokens of the original string compared to the old string
+ * @param {str1} string original string value
+ * @param {str2} string new string value
+ */
+function tokenDifference(str1, str2) {
+ var values = '',
+ tokens1 = str1.split(/\s+/),
+ tokens2 = str2.split(/\s+/);
+
+ outer:
+ for(var i=0;i<tokens1.length;i++) {
+ var token = tokens1[i];
+ for(var j=0;j<tokens2.length;j++) {
+ if(token == tokens2[j]) continue outer;
+ }
+ values += (values.length > 0 ? ' ' : '') + token;
+ }
+ return values;
+}