@@ -52,21 +52,65 @@ export function submitTriggers() {
52
52
53
53
/* global zxcvbn */
54
54
55
+ const disableSubmitButton = ( ) => {
56
+ let submitBtn = document . querySelector ( "#submit" ) ;
57
+ submitBtn . setAttribute ( "disabled" , "disabled" ) ;
58
+ } ;
59
+
60
+ const enableSubmitButton = ( ) => {
61
+ let submitBtn = document . querySelector ( "#submit" ) ;
62
+ submitBtn . removeAttribute ( "disabled" ) ;
63
+ } ;
64
+
55
65
const checkPasswordStrength = ( event ) => {
56
66
let result = document . querySelector ( ".pw-strength-guage" ) ;
57
67
if ( event . target . value === "" ) {
58
68
result . setAttribute ( "class" , "pw-strength-guage" ) ;
69
+ result . setAttribute ( "score" , 0 ) ;
59
70
} else {
60
71
// following recommendations on the zxcvbn JS docs
61
72
// the zxcvbn function is available by loading `vendor/zxcvbn.js`
62
73
// in the register page template only
63
74
let zxcvbnResult = zxcvbn ( event . target . value ) ;
64
75
result . setAttribute ( "class" , `pw-strength-guage pw-strength-guage__${ zxcvbnResult . score } ` ) ;
76
+ result . setAttribute ( "score" , zxcvbnResult . score ) ;
77
+ }
78
+ } ;
79
+
80
+ const currentZxcvbnScore = ( ) => {
81
+ let result = document . querySelector ( ".pw-strength-guage" ) ;
82
+ return parseInt ( result . getAttribute ( "score" ) ) ;
83
+ } ;
84
+
85
+ const passwordsMatch = ( ) => {
86
+ let password = document . querySelector ( "#password" ) ;
87
+ let passwordConfirmation = document . querySelector ( "#password_confirm" ) ;
88
+ return password . value === passwordConfirmation . value ;
89
+ } ;
90
+
91
+ const requiredFieldsHaveValues = ( ) => {
92
+ let inputFields = document . querySelectorAll ( "#content input" ) ;
93
+ let inputFieldsArray = Array . prototype . slice . call ( inputFields ) ;
94
+ return inputFieldsArray . every ( inputField => inputField . value !== "" ) ;
95
+ } ;
96
+
97
+ const checkRequiredFields = ( ) => {
98
+ if ( requiredFieldsHaveValues ( ) && currentZxcvbnScore ( ) >= 2 && passwordsMatch ( ) ) {
99
+ enableSubmitButton ( ) ;
100
+ } else {
101
+ disableSubmitButton ( ) ;
65
102
}
66
103
} ;
67
104
68
- export function passwordStrength ( ) {
105
+ export function registrationFormValidation ( ) {
69
106
let password = document . querySelector ( "#password" ) ;
70
107
if ( password === null ) return ;
108
+ disableSubmitButton ( ) ;
109
+ let inputFields = document . querySelectorAll ( "#content input" ) ;
110
+ inputFields . forEach ( input => {
111
+ if ( input . hasAttribute ( "required" ) ) {
112
+ input . addEventListener ( "input" , checkRequiredFields , false ) ;
113
+ }
114
+ } ) ;
71
115
password . addEventListener ( "input" , checkPasswordStrength , false ) ;
72
116
}
0 commit comments