diff options
Diffstat (limited to 'src/ng')
| -rw-r--r-- | src/ng/animate.js | 23 | ||||
| -rw-r--r-- | src/ng/compile.js | 12 |
2 files changed, 33 insertions, 2 deletions
diff --git a/src/ng/animate.js b/src/ng/animate.js index fa5b936d..1961d47b 100644 --- a/src/ng/animate.js +++ b/src/ng/animate.js @@ -222,6 +222,29 @@ var $AnimateProvider = ['$provide', function($provide) { done && $timeout(done, 0, false); }, + /** + * + * @ngdoc function + * @name ng.$animate#setClass + * @methodOf ng.$animate + * @function + * @description Adds and/or removes the given CSS classes to and from the element. + * Once complete, the done() callback will be fired (if provided). + * @param {jQuery/jqLite element} element the element which will it's CSS classes changed + * removed from it + * @param {string} add the CSS classes which will be added to the element + * @param {string} remove the CSS class which will be removed from the element + * @param {function=} done the callback function (if provided) that will be fired after the + * CSS classes have been set on the element + */ + setClass : function(element, add, remove, done) { + forEach(element, function (element) { + jqLiteAddClass(element, add); + jqLiteRemoveClass(element, remove); + }); + done && $timeout(done, 0, false); + }, + enabled : noop }; }]; diff --git a/src/ng/compile.js b/src/ng/compile.js index e4bf230e..ded62ea9 100644 --- a/src/ng/compile.js +++ b/src/ng/compile.js @@ -690,8 +690,16 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { * @param {string} oldClasses The former CSS className value */ $updateClass : function(newClasses, oldClasses) { - this.$removeClass(tokenDifference(oldClasses, newClasses)); - this.$addClass(tokenDifference(newClasses, oldClasses)); + var toAdd = tokenDifference(newClasses, oldClasses); + var toRemove = tokenDifference(oldClasses, newClasses); + + if(toAdd.length === 0) { + $animate.removeClass(this.$$element, toRemove); + } else if(toRemove.length === 0) { + $animate.addClass(this.$$element, toAdd); + } else { + $animate.setClass(this.$$element, toAdd, toRemove); + } }, /** |
