aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMisko Hevery2010-07-14 17:07:23 -0700
committerMisko Hevery2010-07-14 17:07:23 -0700
commite3e9ac86750b20fb8ad6765011e06d569899612d (patch)
tree51545a0a65f3056c54d213579b19e9f782e2fe00
parent0a57273f0000421639c926d4d180680e3a64c0f7 (diff)
downloadangular.js-e3e9ac86750b20fb8ad6765011e06d569899612d.tar.bz2
ng:style remembers previous style and properly resets to it
-rw-r--r--src/directives.js11
-rw-r--r--src/jqLite.js9
-rw-r--r--test/directivesSpec.js33
3 files changed, 41 insertions, 12 deletions
diff --git a/src/directives.js b/src/directives.js
index 6b81d864..4e7c070b 100644
--- a/src/directives.js
+++ b/src/directives.js
@@ -254,8 +254,17 @@ angularDirective("ng:hide", function(expression, element){
angularDirective("ng:style", function(expression, element){
return function(element){
+ var resetStyle = element.css();
this.$onEval(function(){
- element.css(this.$eval(expression) || {});
+ var style = this.$eval(expression) || {}, key, mergedStyle = {};
+ for(key in style) {
+ if (typeof resetStyle[key] == 'undefined') resetStyle[key] = null;
+ mergedStyle[key] = style[key];
+ }
+ for(key in resetStyle) {
+ mergedStyle[key] = mergedStyle[key] || resetStyle[key];
+ }
+ element.css(mergedStyle);
}, element);
};
});
diff --git a/src/jqLite.js b/src/jqLite.js
index 68172fd8..a024507f 100644
--- a/src/jqLite.js
+++ b/src/jqLite.js
@@ -175,8 +175,15 @@ JQLite.prototype = {
} else {
return style[name];
}
- } else {
+ } else if(name) {
extend(style, name);
+ } else {
+ var current = {};
+ for (var i=0; i<style.length; i++) {
+ name = style[i];
+ current[name] = style[name];
+ }
+ return current;
}
},
diff --git a/test/directivesSpec.js b/test/directivesSpec.js
index ef4814bf..8ce949aa 100644
--- a/test/directivesSpec.js
+++ b/test/directivesSpec.js
@@ -168,17 +168,30 @@ describe("directives", function(){
expect(e2.hasClass('even')).toBeTruthy();
});
- it('should ng:style', function(){
- var scope = compile('<div ng:style="{color:\'red\'}"></div>');
- scope.$eval();
- expect(element.css('color')).toEqual('red');
- });
+ describe('ng:style', function(){
+ it('should set', function(){
+ var scope = compile('<div ng:style="{color:\'red\'}"></div>');
+ scope.$eval();
+ expect(element.css('color')).toEqual('red');
+ });
- it('should silently ignore undefined ng:style', function() {
- var scope = compile('<div ng:style="myStyle"></div>');
- scope.$eval();
- dump(sortedHtml(element));
- expect(element.hasClass('ng-exception')).toBeFalsy();
+ it('should silently ignore undefined style', function() {
+ var scope = compile('<div ng:style="myStyle"></div>');
+ scope.$eval();
+ expect(element.hasClass('ng-exception')).toBeFalsy();
+ });
+
+ it('should preserve and remove previus style', function(){
+ var scope = compile('<div style="color:red;" ng:style="myStyle"></div>');
+ scope.$eval();
+ expect(element.css()).toEqual({color:'red'});
+ scope.myStyle = {color:'blue', width:'10px'};
+ scope.$eval();
+ expect(element.css()).toEqual({color:'blue', width:'10px'});
+ scope.myStyle = {};
+ scope.$eval();
+ expect(element.css()).toEqual({color:'red'});
+ });
});
it('should ng:show', function(){