@@ -390,6 +390,12 @@ var inputType = {
390390 'reset' : noop
391391} ;
392392
393+ // A helper function to call $setValidity and return the value / undefined,
394+ // a pattern that is repeated a lot in the input validation logic.
395+ function validate ( ctrl , validatorName , validity , value ) {
396+ ctrl . $setValidity ( validatorName , validity ) ;
397+ return validity ? value : undefined ;
398+ }
393399
394400function textInputType ( scope , element , attr , ctrl , $sniffer , $browser ) {
395401 // In composition mode, users are still inputing intermediate text buffer,
@@ -474,22 +480,15 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
474480 patternValidator ,
475481 match ;
476482
477- var validate = function ( regexp , value ) {
478- if ( ctrl . $isEmpty ( value ) || regexp . test ( value ) ) {
479- ctrl . $setValidity ( 'pattern' , true ) ;
480- return value ;
481- } else {
482- ctrl . $setValidity ( 'pattern' , false ) ;
483- return undefined ;
484- }
485- } ;
486-
487483 if ( pattern ) {
484+ var validateRegex = function ( regexp , value ) {
485+ return validate ( ctrl , 'pattern' , ctrl . $isEmpty ( value ) || regexp . test ( value ) , value ) ;
486+ } ;
488487 match = pattern . match ( / ^ \/ ( .* ) \/ ( [ g i m ] * ) $ / ) ;
489488 if ( match ) {
490489 pattern = new RegExp ( match [ 1 ] , match [ 2 ] ) ;
491490 patternValidator = function ( value ) {
492- return validate ( pattern , value ) ;
491+ return validateRegex ( pattern , value ) ;
493492 } ;
494493 } else {
495494 patternValidator = function ( value ) {
@@ -500,7 +499,7 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
500499 'Expected {0} to be a RegExp but was {1}. Element: {2}' , pattern ,
501500 patternObj , startingTag ( element ) ) ;
502501 }
503- return validate ( patternObj , value ) ;
502+ return validateRegex ( patternObj , value ) ;
504503 } ;
505504 }
506505
@@ -512,13 +511,7 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
512511 if ( attr . ngMinlength ) {
513512 var minlength = int ( attr . ngMinlength ) ;
514513 var minLengthValidator = function ( value ) {
515- if ( ! ctrl . $isEmpty ( value ) && value . length < minlength ) {
516- ctrl . $setValidity ( 'minlength' , false ) ;
517- return undefined ;
518- } else {
519- ctrl . $setValidity ( 'minlength' , true ) ;
520- return value ;
521- }
514+ return validate ( ctrl , 'minlength' , ctrl . $isEmpty ( value ) || value . length >= minlength , value ) ;
522515 } ;
523516
524517 ctrl . $parsers . push ( minLengthValidator ) ;
@@ -529,13 +522,7 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
529522 if ( attr . ngMaxlength ) {
530523 var maxlength = int ( attr . ngMaxlength ) ;
531524 var maxLengthValidator = function ( value ) {
532- if ( ! ctrl . $isEmpty ( value ) && value . length > maxlength ) {
533- ctrl . $setValidity ( 'maxlength' , false ) ;
534- return undefined ;
535- } else {
536- ctrl . $setValidity ( 'maxlength' , true ) ;
537- return value ;
538- }
525+ return validate ( ctrl , 'maxlength' , ctrl . $isEmpty ( value ) || value . length <= maxlength , value ) ;
539526 } ;
540527
541528 ctrl . $parsers . push ( maxLengthValidator ) ;
@@ -564,13 +551,7 @@ function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
564551 if ( attr . min ) {
565552 var minValidator = function ( value ) {
566553 var min = parseFloat ( attr . min ) ;
567- if ( ! ctrl . $isEmpty ( value ) && value < min ) {
568- ctrl . $setValidity ( 'min' , false ) ;
569- return undefined ;
570- } else {
571- ctrl . $setValidity ( 'min' , true ) ;
572- return value ;
573- }
554+ return validate ( ctrl , 'min' , ctrl . $isEmpty ( value ) || value >= min , value ) ;
574555 } ;
575556
576557 ctrl . $parsers . push ( minValidator ) ;
@@ -580,42 +561,23 @@ function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
580561 if ( attr . max ) {
581562 var maxValidator = function ( value ) {
582563 var max = parseFloat ( attr . max ) ;
583- if ( ! ctrl . $isEmpty ( value ) && value > max ) {
584- ctrl . $setValidity ( 'max' , false ) ;
585- return undefined ;
586- } else {
587- ctrl . $setValidity ( 'max' , true ) ;
588- return value ;
589- }
564+ return validate ( ctrl , 'max' , ctrl . $isEmpty ( value ) || value <= max , value ) ;
590565 } ;
591566
592567 ctrl . $parsers . push ( maxValidator ) ;
593568 ctrl . $formatters . push ( maxValidator ) ;
594569 }
595570
596571 ctrl . $formatters . push ( function ( value ) {
597-
598- if ( ctrl . $isEmpty ( value ) || isNumber ( value ) ) {
599- ctrl . $setValidity ( 'number' , true ) ;
600- return value ;
601- } else {
602- ctrl . $setValidity ( 'number' , false ) ;
603- return undefined ;
604- }
572+ return validate ( ctrl , 'number' , ctrl . $isEmpty ( value ) || isNumber ( value ) , value ) ;
605573 } ) ;
606574}
607575
608576function urlInputType ( scope , element , attr , ctrl , $sniffer , $browser ) {
609577 textInputType ( scope , element , attr , ctrl , $sniffer , $browser ) ;
610578
611579 var urlValidator = function ( value ) {
612- if ( ctrl . $isEmpty ( value ) || URL_REGEXP . test ( value ) ) {
613- ctrl . $setValidity ( 'url' , true ) ;
614- return value ;
615- } else {
616- ctrl . $setValidity ( 'url' , false ) ;
617- return undefined ;
618- }
580+ return validate ( ctrl , 'url' , ctrl . $isEmpty ( value ) || URL_REGEXP . test ( value ) , value ) ;
619581 } ;
620582
621583 ctrl . $formatters . push ( urlValidator ) ;
@@ -626,13 +588,7 @@ function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
626588 textInputType ( scope , element , attr , ctrl , $sniffer , $browser ) ;
627589
628590 var emailValidator = function ( value ) {
629- if ( ctrl . $isEmpty ( value ) || EMAIL_REGEXP . test ( value ) ) {
630- ctrl . $setValidity ( 'email' , true ) ;
631- return value ;
632- } else {
633- ctrl . $setValidity ( 'email' , false ) ;
634- return undefined ;
635- }
591+ return validate ( ctrl , 'email' , ctrl . $isEmpty ( value ) || EMAIL_REGEXP . test ( value ) , value ) ;
636592 } ;
637593
638594 ctrl . $formatters . push ( emailValidator ) ;
0 commit comments