diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/.jshintrc | 3 | ||||
| -rw-r--r-- | src/Angular.js | 24 | ||||
| -rw-r--r-- | src/ng/compile.js | 20 | ||||
| -rw-r--r-- | src/ng/directive/ngClass.js | 23 | 
4 files changed, 44 insertions, 26 deletions
| diff --git a/src/.jshintrc b/src/.jshintrc index e29b09f3..2467d667 100644 --- a/src/.jshintrc +++ b/src/.jshintrc @@ -100,6 +100,7 @@      "assertNotHasOwnProperty": false,      "getter": false,      "getBlockElements": false, +    "tokenDifference": false,      /* AngularPublic.js */      "version": false, @@ -162,4 +163,4 @@      "nullFormCtrl": false    } -}
\ No newline at end of file +} 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; +} diff --git a/src/ng/compile.js b/src/ng/compile.js index 4d83f379..ce3d0514 100644 --- a/src/ng/compile.js +++ b/src/ng/compile.js @@ -688,8 +688,8 @@ function $CompileProvider($provide) {          if(key == 'class') {            value = value || '';            var current = this.$$element.attr('class') || ''; -          this.$removeClass(tokenDifference(current, value).join(' ')); -          this.$addClass(tokenDifference(value, current).join(' ')); +          this.$removeClass(tokenDifference(current, value)); +          this.$addClass(tokenDifference(value, current));          } else {            var booleanKey = getBooleanAttrName(this.$$element[0], key),                normalizedVal, @@ -747,22 +747,6 @@ function $CompileProvider($provide) {              $exceptionHandler(e);            }          }); - -        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.push(token); -          } -          return values; -        }        }, diff --git a/src/ng/directive/ngClass.js b/src/ng/directive/ngClass.js index a0d23a28..10ef7fd1 100644 --- a/src/ng/directive/ngClass.js +++ b/src/ng/directive/ngClass.js @@ -21,9 +21,9 @@ function classDirective(name, selector) {              var mod = $index & 1;              if (mod !== old$index & 1) {                if (mod === selector) { -                addClass(scope.$eval(attr[name])); +                addClass(flattenClasses(scope.$eval(attr[name])));                } else { -                removeClass(scope.$eval(attr[name])); +                removeClass(flattenClasses(scope.$eval(attr[name])));                }              }            }); @@ -32,22 +32,33 @@ function classDirective(name, selector) {          function ngClassWatchAction(newVal) {            if (selector === true || scope.$index % 2 === selector) { +            var newClasses = flattenClasses(newVal || '');              if (oldVal && !equals(newVal,oldVal)) { -              removeClass(oldVal); +              var oldClasses = flattenClasses(oldVal); +              var toRemove = tokenDifference(oldClasses, newClasses); +              if(toRemove.length > 0) { +                removeClass(toRemove); +              } + +              var toAdd = tokenDifference(newClasses, oldClasses); +              if(toAdd.length > 0) { +                addClass(toAdd); +              } +            } else { +              addClass(newClasses);              } -            addClass(newVal);            }            oldVal = copy(newVal);          }          function removeClass(classVal) { -          attr.$removeClass(flattenClasses(classVal)); +          attr.$removeClass(classVal);          }          function addClass(classVal) { -          attr.$addClass(flattenClasses(classVal)); +          attr.$addClass(classVal);          }          function flattenClasses(classVal) { | 
