From 5af945409681d2b613cd96699a8d3044adb573c9 Mon Sep 17 00:00:00 2001 From: starr0stealer Date: Tue, 15 Apr 2014 22:45:07 -0400 Subject: [PATCH 1/2] feat(input): use ValidityState for required state Change NgModelController $isEmpty method to consider HTML5 constraint validation in supporting browsers, fallback to normal empty data check --- src/ng/directive/input.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/ng/directive/input.js b/src/ng/directive/input.js index 10374c3fd04c..acc7c16901c0 100644 --- a/src/ng/directive/input.js +++ b/src/ng/directive/input.js @@ -1613,7 +1613,12 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ * @returns {boolean} True if `value` is empty. */ this.$isEmpty = function(value) { - return isUndefined(value) || value === '' || value === null || value !== value; + var validity = $element.prop('validity'); + if (isObject(validity)) { + return validity.valueMissing; + } else { + return isUndefined(value) || value === '' || value === null || value !== value; + } }; var parentForm = $element.inheritedData('$formController') || nullFormCtrl, From fe8a298f41500c0843b8c3fedb941a699aad451f Mon Sep 17 00:00:00 2001 From: starr0stealer Date: Wed, 16 Apr 2014 00:09:21 -0400 Subject: [PATCH 2/2] feat(input): use ValidityState for required state Change NgModelController $isEmpty method to consider HTML5 constraint validation in supporting browsers, fallback to normal empty data check --- src/ng/directive/input.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/ng/directive/input.js b/src/ng/directive/input.js index acc7c16901c0..44737a34fe1e 100644 --- a/src/ng/directive/input.js +++ b/src/ng/directive/input.js @@ -1613,12 +1613,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ * @returns {boolean} True if `value` is empty. */ this.$isEmpty = function(value) { - var validity = $element.prop('validity'); - if (isObject(validity)) { - return validity.valueMissing; - } else { - return isUndefined(value) || value === '' || value === null || value !== value; - } + return isUndefined(value) || value === '' || value === null || value !== value; }; var parentForm = $element.inheritedData('$formController') || nullFormCtrl, @@ -2064,8 +2059,15 @@ var requiredDirective = function() { if (!ctrl) return; attr.required = true; // force truthy in case we are on non input element + var validity = elm.prop('validity'); + if (!isObject(validity)) { + validity = { + valid: true + }; + } + var validator = function(value) { - if (attr.required && ctrl.$isEmpty(value)) { + if (attr.required && (validity.valueMissing || ctrl.$isEmpty(value))) { ctrl.$setValidity('required', false); return; } else {