Browse Source

Client side validation on sign up page

master
Ilya Konanykhin 8 years ago
parent
commit
ca72edb7e0
  1. 115
      app/assets/javascripts/devise/registrations.js
  2. 8
      app/assets/javascripts/utils.js
  3. 15
      app/views/devise/registrations/new.html.haml

115
app/assets/javascripts/devise/registrations.js

@ -2,50 +2,79 @@ $(document).ready(function(){
var MIN_LEN = 3; var MIN_LEN = 3;
var MAX_SUBMITS = 3; var MAX_SUBMITS = 3;
var submit_count = 0; var submit_count = 0;
$("input[name=commit]").click( function(e){
console.log("clicked"); var checkContacts = function() {
submit_count += 1; submit_count += 1;
//IDs of contact info //IDs of contact info
var contact_info_ids = [ var contact_info_ids = [
"user_email", "user_email",
"user_user_profiles_attributes_0_addrStreet1", "user_user_profiles_attributes_0_addrStreet1",
"user_user_profiles_attributes_0_addrCity", "user_user_profiles_attributes_0_addrCity",
"user_user_profiles_attributes_0_addrState", "user_user_profiles_attributes_0_addrState",
"user_user_profiles_attributes_0_addrZip", "user_user_profiles_attributes_0_addrZip",
"user_user_profiles_attributes_0_phone" "user_user_profiles_attributes_0_phone"
]; ];
var contact_vals = "";
var index = 0; var contact_vals = "";
//see if any contact info exists //see if any contact info exists
for( var index in contact_info_ids){ for( var index in contact_info_ids){
contact_vals += $("#"+contact_info_ids[index]).val(); contact_vals += $("#"+contact_info_ids[index]).val();
}
if( contact_vals.length >= MIN_LEN || submit_count > MAX_SUBMITS){
if( submit_count > MAX_SUBMITS ){
alert("Fine.");
} }
return true; if( contact_vals.length >= MIN_LEN || submit_count > MAX_SUBMITS){
}else{ if( submit_count > MAX_SUBMITS ){
alert("Fine.");
switch(submit_count){ }
case 1: return true;
alert("It appears you have not entered any contact information. " +
"Please do."); }else{
break;
case 2: switch(submit_count){
alert("It is highly recommended that you enter at least one form of" + case 1:
" contact information. It is in your best interest."); alert("It appears you have not entered any contact information. " +
break; "Please do.");
case 3: break;
alert("If something happens to your bicycle, we will not be able to" + case 2:
" notify you. Please enter at least one form of contact."); alert("It is highly recommended that you enter at least one form of" +
break; " contact information. It is in your best interest.");
default: break;
alert("Please enter at least one form of contact."); case 3:
alert("If something happens to your bicycle, we will not be able to" +
" notify you. Please enter at least one form of contact.");
break;
default:
alert("Please enter at least one form of contact.");
}
return false;
} }
return false; };
}
var checkValid = function() {
var errors = {};
var hasErrors = false;
["username", "first_name", "last_name"].forEach(function(requiredField) {
if(!$("#user_" + requiredField).val().trim()) {
errors["user_" + requiredField] = ["can't be blank"];
hasErrors = true;
}
});
if($("#user_password").val().length < 6) {
errors["user_password"] = ["is too short (minimum is 6 characters)"];
hasErrors = true;
}
if($("#user_password").val() != $("#user_password_confirmation").val()) {
errors["user_password_confirmation"] = ["confirmation doesn't match password"];
hasErrors = true;
}
displayFormErrors({errors: errors}, "#new_user");
return !hasErrors;
};
$("input[name=commit]").click(function(e){
return checkContacts() && checkValid();
}); });
}); });

8
app/assets/javascripts/utils.js

@ -1,8 +1,10 @@
function displayFormErrors(data){ function displayFormErrors(data, form){
if(form){
$(form).find(".form-group.has-error").removeClass("has-error").find(".help-block").html("");
}
if(data.errors != undefined ){ if(data.errors != undefined ){
$.each(data.errors, function(field, errorMsg) { $.each(data.errors, function(field, errorMsg) {
$("#"+field).closest(".form-group").addClass("has-error"); $("#"+field).closest(".form-group").addClass("has-error").find(".help-block").html(errorMsg.join(", "));
$("#"+field).siblings(".help-block").html(errorMsg.join(", "));
}); });
} }
} }

15
app/views/devise/registrations/new.html.haml

@ -7,13 +7,16 @@
%fieldset %fieldset
.form-group .form-group
= f.text_field :username, placeholder: 'Username', class: 'form-control' = f.text_field :username, placeholder: 'Username', class: 'form-control', required: true
.help-block
.form-group .form-group
= f.text_field :first_name, placeholder: 'First Name', class: 'form-control' = f.text_field :first_name, placeholder: 'First Name', class: 'form-control', required: true
.help-block
.form-group .form-group
= f.text_field :last_name, placeholder: 'Last Name', class: 'form-control' = f.text_field :last_name, placeholder: 'Last Name', class: 'form-control', required: true
.help-block
.form-group .form-group
= f.email_field :email, placeholder: 'E-mail', class: 'form-control' = f.email_field :email, placeholder: 'E-mail', class: 'form-control'
@ -31,10 +34,12 @@
%fieldset %fieldset
.form-group .form-group
= f.password_field :password, placeholder: 'Password', class: 'form-control' = f.password_field :password, placeholder: 'Password', class: 'form-control', required: true
.help-block
.form-group .form-group
= f.password_field :password_confirmation, placeholder: 'Password Confirmation', class: 'form-control' = f.password_field :password_confirmation, placeholder: 'Password Confirmation', class: 'form-control', required: true
.help-block
.form-group .form-group
= f.submit 'Sign up', class: 'btn btn-primary' = f.submit 'Sign up', class: 'btn btn-primary'

Loading…
Cancel
Save