15
15
}
16
16
} ( function ( $ ) {
17
17
"use strict" ;
18
-
19
- /**
20
- * Validation rule for grouped product, with multiple qty fields,
21
- * only one qty needs to have a positive integer
22
- */
23
- $ . validator . addMethod (
24
- "validate-grouped-qty" ,
25
- function ( value , element , params ) {
26
- var result = false ;
27
- var total = 0 ;
28
- $ ( params ) . find ( 'input[data-validate*="validate-grouped-qty"]' ) . each ( function ( i , e ) {
29
- var val = $ ( e ) . val ( ) ;
30
- if ( val && val . length > 0 ) {
31
- result = true ;
32
- var valInt = parseInt ( val , 10 ) || 0 ;
33
- if ( valInt >= 0 ) {
34
- total += valInt ;
35
- } else {
36
- result = false ;
37
- return result ;
38
- }
39
- }
40
- } ) ;
41
- return result && total > 0 ;
42
- } ,
43
- 'Please specify the quantity of product(s).'
44
- ) ;
45
18
46
- $ . validator . addMethod (
47
- "validate-one-checkbox-required-by-name" ,
48
- function ( value , element , params ) {
49
- var checkedCount = 0 ;
50
- if ( element . type === 'checkbox' ) {
51
- $ ( '[name="' + element . name + '"]' ) . each ( function ( ) {
52
- if ( $ ( this ) . is ( ':checked' ) ) {
53
- checkedCount += 1 ;
54
- return false ;
19
+ $ . each ( {
20
+ 'validate-grouped-qty' : [
21
+ function ( value , element , params ) {
22
+ var result = false ;
23
+ var total = 0 ;
24
+ $ ( params ) . find ( 'input[data-validate*="validate-grouped-qty"]' ) . each ( function ( i , e ) {
25
+ var val = $ ( e ) . val ( ) ;
26
+ if ( val && val . length > 0 ) {
27
+ result = true ;
28
+ var valInt = parseInt ( val , 10 ) || 0 ;
29
+ if ( valInt >= 0 ) {
30
+ total += valInt ;
31
+ } else {
32
+ result = false ;
33
+ return result ;
34
+ }
55
35
}
56
36
} ) ;
57
- }
58
- var container = '#' + params ;
59
- if ( checkedCount > 0 ) {
60
- $ ( container ) . removeClass ( 'validation-failed' ) ;
61
- $ ( container ) . addClass ( 'validation-passed' ) ;
62
- return true ;
63
- } else {
64
- $ ( container ) . addClass ( 'validation-failed' ) ;
65
- $ ( container ) . removeClass ( 'validation-passed' ) ;
37
+ return result && total > 0 ;
38
+ } ,
39
+ 'Please specify the quantity of product(s).'
40
+ ] ,
41
+ 'validate-one-checkbox-required-by-name' : [
42
+ function ( value , element , params ) {
43
+ var checkedCount = 0 ;
44
+ if ( element . type === 'checkbox' ) {
45
+ $ ( '[name="' + element . name + '"]' ) . each ( function ( ) {
46
+ if ( $ ( this ) . is ( ':checked' ) ) {
47
+ checkedCount += 1 ;
48
+ return false ;
49
+ }
50
+ } ) ;
51
+ }
52
+ var container = '#' + params ;
53
+ if ( checkedCount > 0 ) {
54
+ $ ( container ) . removeClass ( 'validation-failed' ) ;
55
+ $ ( container ) . addClass ( 'validation-passed' ) ;
56
+ return true ;
57
+ } else {
58
+ $ ( container ) . addClass ( 'validation-failed' ) ;
59
+ $ ( container ) . removeClass ( 'validation-passed' ) ;
60
+ return false ;
61
+ }
62
+ } ,
63
+ 'Please select one of the options.'
64
+ ] ,
65
+ 'validate-date-between' : [
66
+ function ( value , element , params ) {
67
+ var minDate = new Date ( params [ 0 ] ) ,
68
+ maxDate = new Date ( params [ 1 ] ) ,
69
+ inputDate = new Date ( element . value ) ;
70
+ minDate . setHours ( 0 ) ;
71
+ maxDate . setHours ( 0 ) ;
72
+ if ( inputDate >= minDate && inputDate <= maxDate ) {
73
+ return true ;
74
+ }
75
+ this . dateBetweenErrorMessage = $ . mage . __ ( 'Please enter a date between %min and %max.' ) . replace ( '%min' , minDate ) . replace ( '%max' , maxDate ) ;
66
76
return false ;
77
+ } ,
78
+ function ( ) {
79
+ return this . dateBetweenErrorMessage ;
67
80
}
68
- } ,
69
- 'Please select one of the options.'
70
- ) ;
81
+ ] ,
82
+ 'validate-dob' : [
83
+ function ( val , element , params ) {
84
+ var dob = $ ( element ) . parents ( '.customer-dob' ) ;
85
+ $ ( dob ) . find ( '.' + this . settings . errorClass ) . removeClass ( this . settings . errorClass ) ;
86
+ var dayVal = $ ( dob ) . find ( params [ 0 ] ) . find ( 'input:text' ) . val ( ) ,
87
+ monthVal = $ ( dob ) . find ( params [ 1 ] ) . find ( 'input:text' ) . val ( ) ,
88
+ yearVal = $ ( dob ) . find ( params [ 2 ] ) . find ( 'input:text' ) . val ( ) ,
89
+ dobLength = dayVal . length + monthVal . length + yearVal . length ;
90
+ if ( params [ 3 ] && dobLength === 0 ) {
91
+ this . dobErrorMessage = 'This is a required field.' ;
92
+ return false ;
93
+ }
94
+ if ( ! params [ 3 ] && dobLength === 0 ) {
95
+ return true ;
96
+ }
97
+ var day = parseInt ( dayVal , 10 ) || 0 ,
98
+ month = parseInt ( monthVal , 10 ) || 0 ,
99
+ year = parseInt ( yearVal , 10 ) || 0 ,
100
+ curYear = ( new Date ( ) ) . getFullYear ( ) ;
101
+ if ( ! day || ! month || ! year ) {
102
+ this . dobErrorMessage = 'Please enter a valid full date.' ;
103
+ return false ;
104
+ }
105
+ if ( month < 1 || month > 12 ) {
106
+ this . dobErrorMessage = 'Please enter a valid month (1-12).' ;
107
+ return false ;
108
+ }
109
+ if ( year < 1900 || year > curYear ) {
110
+ this . dobErrorMessage =
111
+ $ . mage . __ ( 'Please enter a valid year (1900-%1).' ) . replace ( '%1' , curYear . toString ( ) ) ;
112
+ return false ;
113
+ }
114
+ var validateDayInMonth = new Date ( year , month , 0 ) . getDate ( ) ;
115
+ if ( day < 1 || day > validateDayInMonth ) {
116
+ this . dobErrorMessage =
117
+ $ . mage . __ ( 'Please enter a valid day (1-%1).' ) . replace ( '%1' , validateDayInMonth . toString ( ) ) ;
118
+ return false ;
119
+ }
120
+ var today = new Date ( ) ,
121
+ dateEntered = new Date ( ) ;
122
+ dateEntered . setFullYear ( year , month - 1 , day ) ;
123
+ if ( dateEntered > today ) {
124
+ this . dobErrorMessage = $ . mage . __ ( 'Please enter a date in the past.' ) ;
125
+ return false ;
126
+ }
71
127
72
- $ . validator . addMethod (
73
- "validate-date-between" ,
74
- function ( value , element , params ) {
75
- var minDate = new Date ( params [ 0 ] ) ,
76
- maxDate = new Date ( params [ 1 ] ) ,
77
- inputDate = new Date ( element . value ) ;
78
- minDate . setHours ( 0 ) ;
79
- maxDate . setHours ( 0 ) ;
80
- if ( inputDate >= minDate && inputDate <= maxDate ) {
128
+ day = day % 10 === day ? '0' + day : day ;
129
+ month = month % 10 === month ? '0' + month : month ;
130
+ $ ( element ) . val ( month + '/' + day + '/' + year ) ;
81
131
return true ;
132
+ } ,
133
+ function ( ) {
134
+ return this . dobErrorMessage ;
82
135
}
83
- this . dateBetweenErrorMessage = $ . mage . __ ( 'Please enter a date between %min and %max.' ) . replace ( '%min' , minDate ) . replace ( '%max' , maxDate ) ;
84
- return false ;
85
- } ,
86
- function ( ) {
87
- return this . dateBetweenErrorMessage ;
88
- }
89
- ) ;
90
- } ) ) ;
136
+ ]
137
+ } , function ( i , rule ) {
138
+ rule . unshift ( i ) ;
139
+ $ . validator . addMethod . apply ( $ . validator , rule ) ;
140
+ } ) ;
141
+ } ) ) ;
0 commit comments