From 6ea1ac7b05a4079bcda0356e095703d36ccdf6b3 Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Wed, 7 Apr 2010 14:13:10 -0700 Subject: added $invalidWidget service --- scenario/widgets.html | 2 +- src/Widgets.js | 7 ++++++- src/services.js | 15 +++++++++++++++ test/servicesSpec.js | 20 ++++++++++++++++++++ 4 files changed, 42 insertions(+), 2 deletions(-) diff --git a/scenario/widgets.html b/scenario/widgets.html index ab27e490..b83670b8 100644 --- a/scenario/widgets.html +++ b/scenario/widgets.html @@ -15,7 +15,7 @@ Input text field basic - + text.basic={{text.basic}} 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; +}); diff --git a/test/servicesSpec.js b/test/servicesSpec.js index 43511853..b7dfe4c8 100644 --- a/test/servicesSpec.js +++ b/test/servicesSpec.js @@ -54,3 +54,23 @@ describe("services", function(){ }); }); + +describe("service $invalidWidgets", function(){ + var scope; + beforeEach(function(){ + scope = null; + }); + afterEach(function(){ + if (scope && scope.$element) + scope.$element.remove(); + }); + + it("should count number of invalid widgets", function(){ + var scope = compile('').$init(); + expect(scope.$invalidWidgets.length).toEqual(1); + scope.price = 123; + scope.$eval(); + expect(scope.$invalidWidgets.length).toEqual(0); + scope.$element.remove(); + }); +}); -- cgit v1.2.3