diff options
| author | Ben Wiklund | 2014-01-05 19:49:51 -0800 | 
|---|---|---|
| committer | Igor Minar | 2014-01-06 17:35:13 -0800 | 
| commit | cdc4d485a6daa0c74e5d07d8def2a3ee68d93d13 (patch) | |
| tree | efe77516f31179de4dddf88b79f2d052ab94a6da | |
| parent | c894470d4122913168dd75f829f1d19c4af696ed (diff) | |
| download | angular.js-cdc4d485a6daa0c74e5d07d8def2a3ee68d93d13.tar.bz2 | |
refactor(input): wrapped validation logic in helper function
Closes #5643
| -rw-r--r-- | src/ng/directive/input.js | 80 | 
1 files changed, 18 insertions, 62 deletions
| diff --git a/src/ng/directive/input.js b/src/ng/directive/input.js index 00c1c821..4e773978 100644 --- a/src/ng/directive/input.js +++ b/src/ng/directive/input.js @@ -390,6 +390,12 @@ var inputType = {    'reset': noop  }; +// A helper function to call $setValidity and return the value / undefined, +// a pattern that is repeated a lot in the input validation logic. +function validate(ctrl, validatorName, validity, value){ +  ctrl.$setValidity(validatorName, validity); +  return validity ? value : undefined; +}  function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {    // In composition mode, users are still inputing intermediate text buffer, @@ -474,22 +480,15 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {        patternValidator,        match; -  var validate = function(regexp, value) { -    if (ctrl.$isEmpty(value) || regexp.test(value)) { -      ctrl.$setValidity('pattern', true); -      return value; -    } else { -      ctrl.$setValidity('pattern', false); -      return undefined; -    } -  }; -    if (pattern) { +    var validateRegex = function(regexp, value) { +      return validate(ctrl, 'pattern', ctrl.$isEmpty(value) || regexp.test(value), value); +    };      match = pattern.match(/^\/(.*)\/([gim]*)$/);      if (match) {        pattern = new RegExp(match[1], match[2]);        patternValidator = function(value) { -        return validate(pattern, value); +        return validateRegex(pattern, value);        };      } else {        patternValidator = function(value) { @@ -500,7 +499,7 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {              'Expected {0} to be a RegExp but was {1}. Element: {2}', pattern,              patternObj, startingTag(element));          } -        return validate(patternObj, value); +        return validateRegex(patternObj, value);        };      } @@ -512,13 +511,7 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {    if (attr.ngMinlength) {      var minlength = int(attr.ngMinlength);      var minLengthValidator = function(value) { -      if (!ctrl.$isEmpty(value) && value.length < minlength) { -        ctrl.$setValidity('minlength', false); -        return undefined; -      } else { -        ctrl.$setValidity('minlength', true); -        return value; -      } +      return validate(ctrl, 'minlength', ctrl.$isEmpty(value) || value.length >= minlength, value);      };      ctrl.$parsers.push(minLengthValidator); @@ -529,13 +522,7 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {    if (attr.ngMaxlength) {      var maxlength = int(attr.ngMaxlength);      var maxLengthValidator = function(value) { -      if (!ctrl.$isEmpty(value) && value.length > maxlength) { -        ctrl.$setValidity('maxlength', false); -        return undefined; -      } else { -        ctrl.$setValidity('maxlength', true); -        return value; -      } +      return validate(ctrl, 'maxlength', ctrl.$isEmpty(value) || value.length <= maxlength, value);      };      ctrl.$parsers.push(maxLengthValidator); @@ -564,13 +551,7 @@ function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {    if (attr.min) {      var minValidator = function(value) {        var min = parseFloat(attr.min); -      if (!ctrl.$isEmpty(value) && value < min) { -        ctrl.$setValidity('min', false); -        return undefined; -      } else { -        ctrl.$setValidity('min', true); -        return value; -      } +      return validate(ctrl, 'min', ctrl.$isEmpty(value) || value >= min, value);      };      ctrl.$parsers.push(minValidator); @@ -580,13 +561,7 @@ function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {    if (attr.max) {      var maxValidator = function(value) {        var max = parseFloat(attr.max); -      if (!ctrl.$isEmpty(value) && value > max) { -        ctrl.$setValidity('max', false); -        return undefined; -      } else { -        ctrl.$setValidity('max', true); -        return value; -      } +      return validate(ctrl, 'max', ctrl.$isEmpty(value) || value <= max, value);      };      ctrl.$parsers.push(maxValidator); @@ -594,14 +569,7 @@ function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {    }    ctrl.$formatters.push(function(value) { - -    if (ctrl.$isEmpty(value) || isNumber(value)) { -      ctrl.$setValidity('number', true); -      return value; -    } else { -      ctrl.$setValidity('number', false); -      return undefined; -    } +    return validate(ctrl, 'number', ctrl.$isEmpty(value) || isNumber(value), value);    });  } @@ -609,13 +577,7 @@ function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {    textInputType(scope, element, attr, ctrl, $sniffer, $browser);    var urlValidator = function(value) { -    if (ctrl.$isEmpty(value) || URL_REGEXP.test(value)) { -      ctrl.$setValidity('url', true); -      return value; -    } else { -      ctrl.$setValidity('url', false); -      return undefined; -    } +    return validate(ctrl, 'url', ctrl.$isEmpty(value) || URL_REGEXP.test(value), value);    };    ctrl.$formatters.push(urlValidator); @@ -626,13 +588,7 @@ function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {    textInputType(scope, element, attr, ctrl, $sniffer, $browser);    var emailValidator = function(value) { -    if (ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value)) { -      ctrl.$setValidity('email', true); -      return value; -    } else { -      ctrl.$setValidity('email', false); -      return undefined; -    } +    return validate(ctrl, 'email', ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value), value);    };    ctrl.$formatters.push(emailValidator); | 
