From cd03fe92a5dbd2aba516b64fc8067c5fba1e4a81 Mon Sep 17 00:00:00 2001
From: Misko Hevery
Date: Tue, 13 Apr 2010 14:25:12 -0700
Subject: checkbox widget fix
---
angular-debug.js | 11 ++++++++---
src/services.js | 7 ++++++-
src/widgets.js | 4 ++--
test/widgetsSpec.js | 11 ++++++++++-
4 files changed, 26 insertions(+), 7 deletions(-)
diff --git a/angular-debug.js b/angular-debug.js
index c96947a3..897db442 100644
--- a/angular-debug.js
+++ b/angular-debug.js
@@ -3185,13 +3185,13 @@ function valueAccessor(scope, element) {
}
function checkedAccessor(scope, element) {
- var domElement = element[0];
+ var domElement = element[0], elementValue = domElement.value;
return {
get: function(){
return !!domElement.checked;
},
set: function(value){
- domElement.checked = !!value;
+ domElement.checked = toBoolean(value);
}
};
}
@@ -3444,8 +3444,13 @@ angularService("$location", function(browser){
scope.$root.$eval();
});
parse(browser.getUrl());
+ var lastURL;
this.$onEval(PRIORITY_LAST, function(){
- browser.setUrl(toString());
+ var url = toString();
+ if (lastURL != url) {
+ browser.setUrl(url);
+ lastURL = url;
+ }
});
return location;
}, {inject: ['$browser']});
diff --git a/src/services.js b/src/services.js
index e91a8eca..11453338 100644
--- a/src/services.js
+++ b/src/services.js
@@ -44,8 +44,13 @@ angularService("$location", function(browser){
scope.$root.$eval();
});
parse(browser.getUrl());
+ var lastURL;
this.$onEval(PRIORITY_LAST, function(){
- browser.setUrl(toString());
+ var url = toString();
+ if (lastURL != url) {
+ browser.setUrl(url);
+ lastURL = url;
+ }
});
return location;
}, {inject: ['$browser']});
diff --git a/src/widgets.js b/src/widgets.js
index b281ac2e..28798c1b 100644
--- a/src/widgets.js
+++ b/src/widgets.js
@@ -49,13 +49,13 @@ function valueAccessor(scope, element) {
}
function checkedAccessor(scope, element) {
- var domElement = element[0];
+ var domElement = element[0], elementValue = domElement.value;
return {
get: function(){
return !!domElement.checked;
},
set: function(value){
- domElement.checked = !!value;
+ domElement.checked = toBoolean(value);
}
};
}
diff --git a/test/widgetsSpec.js b/test/widgetsSpec.js
index c64f03ca..04b8b1ec 100644
--- a/test/widgetsSpec.js
+++ b/test/widgetsSpec.js
@@ -6,9 +6,10 @@ describe("input widget", function(){
scope = null;
element = null;
var compiler = new Compiler(angularTextMarkup, angularAttrMarkup, angularDirective, angularWidget);
- compile = function(html) {
+ compile = function(html, before) {
element = jqLite(html);
scope = compiler.compile(element)(element);
+ (before||noop)();
scope.$init();
};
});
@@ -51,6 +52,14 @@ describe("input widget", function(){
expect(scope.$get('list')).toEqual(['1', '2', '3']);
});
+ it("should process ng-format for booleans", function(){
+ compile('', function(){
+ scope.name = false;
+ });
+ expect(scope.name).toEqual(false);
+ expect(scope.$element[0].checked).toEqual(false);
+ });
+
it("should process ng-validation", function(){
compile('');
expect(element.hasClass('ng-validation-error')).toBeTruthy();
--
cgit v1.2.3