From 3245209bdb9e656622756220c5bbeb80d3ae2eac Mon Sep 17 00:00:00 2001
From: Shyam Seshadri
Date: Wed, 2 Jun 2010 17:13:10 -0700
Subject: Add ability to add conditions to ng-required
---
src/widgets.js | 11 ++++++++---
test/widgetsSpec.js | 23 +++++++++++++++++++++++
2 files changed, 31 insertions(+), 3 deletions(-)
diff --git a/src/widgets.js b/src/widgets.js
index 09d743e9..42d56e20 100644
--- a/src/widgets.js
+++ b/src/widgets.js
@@ -35,16 +35,21 @@ function compileValidator(expr) {
function valueAccessor(scope, element) {
var validatorName = element.attr('ng-validate') || NOOP,
validator = compileValidator(validatorName),
- required = element.attr('ng-required'),
+ requiredExpr = element.attr('ng-required'),
farmatterName = element.attr('ng-format') || NOOP,
formatter = angularFormatter(farmatterName),
- format, parse, lastError;
+ format, parse, lastError, required;
invalidWidgets = scope.$invalidWidgets || {markValid:noop, markInvalid:noop};
if (!validator) throw "Validator named '" + validatorName + "' not found.";
if (!formatter) throw "Formatter named '" + farmatterName + "' not found.";
format = formatter.format;
parse = formatter.parse;
- required = required || required === '';
+ if (requiredExpr) {
+ scope.$watch(requiredExpr, function(newValue) {required = newValue; validate();});
+ } else {
+ required = requiredExpr === '';
+ }
+
element.data('$validate', validate);
return {
diff --git a/test/widgetsSpec.js b/test/widgetsSpec.js
index 17120682..dc6050b8 100644
--- a/test/widgetsSpec.js
+++ b/test/widgetsSpec.js
@@ -221,6 +221,29 @@ describe("widget", function(){
expect(element.attr('ng-validation-error')).toEqual('Required');
});
+ it('should allow conditions on ng-required', function() {
+ compile('');
+ scope.$set('ineedz', false);
+ scope.$eval();
+ expect(element.hasClass('ng-validation-error')).toBeFalsy();
+ expect(element.attr('ng-validation-error')).toBeFalsy();
+
+ scope.$set('price', 'xxx');
+ scope.$eval();
+ expect(element.hasClass('ng-validation-error')).toBeFalsy();
+ expect(element.attr('ng-validation-error')).toBeFalsy();
+
+ scope.$set('ineedz', true);
+ scope.$eval();
+ expect(element.hasClass('ng-validation-error')).toBeFalsy();
+ expect(element.attr('ng-validation-error')).toBeFalsy();
+
+ element.val('');
+ element.trigger('keyup');
+ expect(element.hasClass('ng-validation-error')).toBeTruthy();
+ expect(element.attr('ng-validation-error')).toEqual('Required');
+ });
+
it("should process ng-required2", function() {
compile('');
expect(scope.$get('name')).toEqual("Misko");
--
cgit v1.2.3