mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-04-28 10:24:45 +00:00
refactor(input): wrapped validation logic in helper function
Closes #5643
This commit is contained in:
parent
c894470d41
commit
cdc4d485a6
1 changed files with 18 additions and 62 deletions
|
|
@ -390,6 +390,12 @@ var inputType = {
|
||||||
'reset': noop
|
'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) {
|
function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
||||||
// In composition mode, users are still inputing intermediate text buffer,
|
// In composition mode, users are still inputing intermediate text buffer,
|
||||||
|
|
@ -474,22 +480,15 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
||||||
patternValidator,
|
patternValidator,
|
||||||
match;
|
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) {
|
if (pattern) {
|
||||||
|
var validateRegex = function(regexp, value) {
|
||||||
|
return validate(ctrl, 'pattern', ctrl.$isEmpty(value) || regexp.test(value), value);
|
||||||
|
};
|
||||||
match = pattern.match(/^\/(.*)\/([gim]*)$/);
|
match = pattern.match(/^\/(.*)\/([gim]*)$/);
|
||||||
if (match) {
|
if (match) {
|
||||||
pattern = new RegExp(match[1], match[2]);
|
pattern = new RegExp(match[1], match[2]);
|
||||||
patternValidator = function(value) {
|
patternValidator = function(value) {
|
||||||
return validate(pattern, value);
|
return validateRegex(pattern, value);
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
patternValidator = function(value) {
|
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,
|
'Expected {0} to be a RegExp but was {1}. Element: {2}', pattern,
|
||||||
patternObj, startingTag(element));
|
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) {
|
if (attr.ngMinlength) {
|
||||||
var minlength = int(attr.ngMinlength);
|
var minlength = int(attr.ngMinlength);
|
||||||
var minLengthValidator = function(value) {
|
var minLengthValidator = function(value) {
|
||||||
if (!ctrl.$isEmpty(value) && value.length < minlength) {
|
return validate(ctrl, 'minlength', ctrl.$isEmpty(value) || value.length >= minlength, value);
|
||||||
ctrl.$setValidity('minlength', false);
|
|
||||||
return undefined;
|
|
||||||
} else {
|
|
||||||
ctrl.$setValidity('minlength', true);
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
ctrl.$parsers.push(minLengthValidator);
|
ctrl.$parsers.push(minLengthValidator);
|
||||||
|
|
@ -529,13 +522,7 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
||||||
if (attr.ngMaxlength) {
|
if (attr.ngMaxlength) {
|
||||||
var maxlength = int(attr.ngMaxlength);
|
var maxlength = int(attr.ngMaxlength);
|
||||||
var maxLengthValidator = function(value) {
|
var maxLengthValidator = function(value) {
|
||||||
if (!ctrl.$isEmpty(value) && value.length > maxlength) {
|
return validate(ctrl, 'maxlength', ctrl.$isEmpty(value) || value.length <= maxlength, value);
|
||||||
ctrl.$setValidity('maxlength', false);
|
|
||||||
return undefined;
|
|
||||||
} else {
|
|
||||||
ctrl.$setValidity('maxlength', true);
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
ctrl.$parsers.push(maxLengthValidator);
|
ctrl.$parsers.push(maxLengthValidator);
|
||||||
|
|
@ -564,13 +551,7 @@ function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
||||||
if (attr.min) {
|
if (attr.min) {
|
||||||
var minValidator = function(value) {
|
var minValidator = function(value) {
|
||||||
var min = parseFloat(attr.min);
|
var min = parseFloat(attr.min);
|
||||||
if (!ctrl.$isEmpty(value) && value < min) {
|
return validate(ctrl, 'min', ctrl.$isEmpty(value) || value >= min, value);
|
||||||
ctrl.$setValidity('min', false);
|
|
||||||
return undefined;
|
|
||||||
} else {
|
|
||||||
ctrl.$setValidity('min', true);
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
ctrl.$parsers.push(minValidator);
|
ctrl.$parsers.push(minValidator);
|
||||||
|
|
@ -580,13 +561,7 @@ function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
||||||
if (attr.max) {
|
if (attr.max) {
|
||||||
var maxValidator = function(value) {
|
var maxValidator = function(value) {
|
||||||
var max = parseFloat(attr.max);
|
var max = parseFloat(attr.max);
|
||||||
if (!ctrl.$isEmpty(value) && value > max) {
|
return validate(ctrl, 'max', ctrl.$isEmpty(value) || value <= max, value);
|
||||||
ctrl.$setValidity('max', false);
|
|
||||||
return undefined;
|
|
||||||
} else {
|
|
||||||
ctrl.$setValidity('max', true);
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
ctrl.$parsers.push(maxValidator);
|
ctrl.$parsers.push(maxValidator);
|
||||||
|
|
@ -594,14 +569,7 @@ function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
||||||
}
|
}
|
||||||
|
|
||||||
ctrl.$formatters.push(function(value) {
|
ctrl.$formatters.push(function(value) {
|
||||||
|
return validate(ctrl, 'number', ctrl.$isEmpty(value) || isNumber(value), value);
|
||||||
if (ctrl.$isEmpty(value) || isNumber(value)) {
|
|
||||||
ctrl.$setValidity('number', true);
|
|
||||||
return value;
|
|
||||||
} else {
|
|
||||||
ctrl.$setValidity('number', false);
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -609,13 +577,7 @@ function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
||||||
textInputType(scope, element, attr, ctrl, $sniffer, $browser);
|
textInputType(scope, element, attr, ctrl, $sniffer, $browser);
|
||||||
|
|
||||||
var urlValidator = function(value) {
|
var urlValidator = function(value) {
|
||||||
if (ctrl.$isEmpty(value) || URL_REGEXP.test(value)) {
|
return validate(ctrl, 'url', ctrl.$isEmpty(value) || URL_REGEXP.test(value), value);
|
||||||
ctrl.$setValidity('url', true);
|
|
||||||
return value;
|
|
||||||
} else {
|
|
||||||
ctrl.$setValidity('url', false);
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
ctrl.$formatters.push(urlValidator);
|
ctrl.$formatters.push(urlValidator);
|
||||||
|
|
@ -626,13 +588,7 @@ function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
||||||
textInputType(scope, element, attr, ctrl, $sniffer, $browser);
|
textInputType(scope, element, attr, ctrl, $sniffer, $browser);
|
||||||
|
|
||||||
var emailValidator = function(value) {
|
var emailValidator = function(value) {
|
||||||
if (ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value)) {
|
return validate(ctrl, 'email', ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value), value);
|
||||||
ctrl.$setValidity('email', true);
|
|
||||||
return value;
|
|
||||||
} else {
|
|
||||||
ctrl.$setValidity('email', false);
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
ctrl.$formatters.push(emailValidator);
|
ctrl.$formatters.push(emailValidator);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue