aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMisko Hevery2010-04-07 14:13:10 -0700
committerMisko Hevery2010-04-07 14:13:10 -0700
commit6ea1ac7b05a4079bcda0356e095703d36ccdf6b3 (patch)
treece5fd6f406a2311e2b2dbaf06d3263ef3b18b42f /src
parentee327a1f4f75f57c2a2c6166520c092d4942ffe0 (diff)
downloadangular.js-6ea1ac7b05a4079bcda0356e095703d36ccdf6b3.tar.bz2
added $invalidWidget service
Diffstat (limited to 'src')
-rw-r--r--src/Widgets.js7
-rw-r--r--src/services.js15
2 files changed, 21 insertions, 1 deletions
diff --git a/src/Widgets.js b/src/Widgets.js
index 8e668c8f..703fb376 100644
--- a/src/Widgets.js
+++ b/src/Widgets.js
@@ -22,7 +22,8 @@ function valueAccessor(scope, element) {
var validatorName = element.attr('ng-validate') || NOOP,
validator = compileValidator(validatorName),
required = element.attr('ng-required'),
- lastError;
+ lastError,
+ invalidWidgets = scope.$invalidWidgets || {markValid:noop, markInvalid:noop};
required = required || required === '';
if (!validator) throw "Validator named '" + validatorName + "' not found.";
function validate(value) {
@@ -30,6 +31,10 @@ function valueAccessor(scope, element) {
if (error !== lastError) {
elementError(element, NG_VALIDATION_ERROR, error);
lastError = error;
+ if (error)
+ invalidWidgets.markInvalid(element);
+ else
+ invalidWidgets.markValid(element);
}
return value;
}
diff --git a/src/services.js b/src/services.js
index 173cee98..9d60f795 100644
--- a/src/services.js
+++ b/src/services.js
@@ -87,3 +87,18 @@ angularService("$hover", function(browser) {
}
});
}, {inject:['$browser']});
+
+angularService("$invalidWidgets", function(){
+ var invalidWidgets = [];
+ invalidWidgets.markValid = function(element){
+ var index = indexOf(invalidWidgets, element);
+ if (index != -1)
+ invalidWidgets.splice(index, 1);
+ };
+ invalidWidgets.markInvalid = function(element){
+ var index = indexOf(invalidWidgets, element);
+ if (index === -1)
+ invalidWidgets.push(element);
+ };
+ return invalidWidgets;
+});