JSFiddle - React, Tailwind, and code Playground
Profile Setup - UI
by Hugo Carneiro
HTML
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<div class="container-fluid" >
<div class="row">
<div class="col-sm-12">
<div class="profile-holder" ontouchstart="">
<div class="profile-people-holder">
<div class="profile-name">
<h3>Profile settings</h3>
<p>Update your profile password and notifications settings</p>
</div>
</div>
<div class="profile-settings-holder">
<form class="form-horizontal profile-settings profile-update">
<div class="form-group clearfix">
<div class="col-sm-12 control-label">
<label for="profile_name">Your full name</label>
</div>
<div class="col-sm-12">
<input type="text" class="form-control" id="profile_name" name="Your full name" placeholder="Enter your full name" value="">
</div>
</div>
<div class="form-group clearfix">
<div class="col-sm-12 control-label profile-email">
<label for="profile_email">Your email</label>
<div class="btn btn-primary text-helper request-invitation">Request new invitation</div>
</div>
<div class="col-sm-12">
<input type="email" class="form-control" id="profile_email" name="Your email" placeholder="Enter your email" value="">
</div>
</div>
<div class="form-group clearfix">
<div class="col-sm-12 control-label">
<label for="profile_password">Change password</label>
<span class="text-helper">Only enter a password if you want to change it</span>
</div>
<div class="col-sm-12">
<input type="password" class="form-control"...
CSS
/* DO NOT USE THIS */
@import url(https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700);
html,
body {
font-family: "Open Sans", "Helvetica Neue", Arial, Helvetica, sans-serif;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* END OF DO NOT USE THIS */
img {
max-width: 100%;
height: auto;
}
/* Buttons */
.btn-primary {
display: block;
clear: both;
width: 100%;
padding: 10px 16px;
font-size: 18px;
line-height: 1.33;
border: none;
border-radius: 6px;
text-align: center;
cursor: pointer;
}
.btn-secondary {
display: block;
clear: both;
width: 100%;
padding: 10px 16px;
font-size: 18px;
line-height: 1.33;
border: none;
border-radius: 6px;
text-align: center;
cursor: pointer;
}
.btn-primary:focus,
.btn-primary:hover,
.btn-secondary:focus,
.btn-secondary:hover,
.btn:active:focus {
outline: none;
}
.btn-danger {
display: block;
clear: both;
width: 100%;
padding: 10px 16px;
font-size: 18px;
line-height: 1.33;
border: none;
border-radius: 6px;
text-align: center;
cursor: pointer;
}
.btn-danger:active,
.btn-danger:active:focus,
.btn-danger:active:hover,
.btn-danger:focus,
.btn-danger:hover {
color: #FFF;
background-color: #c9302c;
border-color: #c9302c;
outline: none;
}
.form-horizontal .control-label {
text-align: left !important;
}
.form-group .control-label label {
font-weight: 600;
margin-bottom: 0px;
padding-top: 5px;
}
.form-control {
border-radius: 22px;
border: 1px solid transparent;
height: 44px;
line-height: 44px;
padding: 0 15px;
-webkit-box-shadow: inset 0px 0px 4px rgba(0, 0, 0, 0.15);
box-shadow: inset 0px 0px 4px rgba(0, 0, 0, 0.15);
-webkit-appearance: none;
}
.form-control:focus {
border: 1px solid #00BCD4;
-webkit-box-shadow: inset 0px 0px 4px rgba(0, 0, 0, 0.15);
box-shadow: inset 0px 0px 4px rgba(0, 0, 0, 0.15);
}
.text-helper {
margin-top: 0.2em;
...
JavaScript
var profileSettings = {};
// ENABLE NOTIFICATIONS
$('#notification_toggle').on('change', function() {
var listHeight = $('.judgments-settings .list').outerHeight();
var headerHeight = $('.judgments-settings .settings-legend').outerHeight();
if ($(this).is(':checked')) {
$('.judgments-settings').removeClass('disabled').stop().animate({
height: listHeight + headerHeight + 1
}, 500);
} else {
$('.judgments-settings').addClass('disabled').stop().animate({
height: 0
}, 500);
}
});
$('.request-invitation').on('click', function() {
alert('REDIRECT USER TO OTHER SCREEN');
});
// SAVE CONFIGURATION
$('.save-profile-settings').on('click', function() {
// VALIDATIONS
// Name
if ( $('#profile_name').val().length > 0 ) {
$('#profile_name').parents('.form-group').removeClass('has-error');
} else {
$('#profile_name').parents('.form-group').addClass('has-error');
return;
}
// Email
var pattern = new RegExp(/^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/);
var email = $('#profile_email').val();
if ( email.length > 0 && pattern.test(email)) {
$('#profile_email').parents('.form-group').removeClass('has-error');
} else {
$('#profile_email').parents('.form-group').addClass('has-error');
return;
}
// Password
if ( $('#profile_password').val().length > 0 ) {
$('#profile_password').parents('.form-group').removeClass('has-error');
if ( $('#profile_password').val() === $('#profile_password_confirm').val() ) {
$('#profile_password_confirm').parents('.form-group').removeClass('has-error');
} else {
$('#profile_password_confirm').parents('.form-group').addClass('has-error');
return;
}
} else {
$('#profile_password').parents('.form-group').addClass('has-error');
return;
}
// SAVE ALL ENTRIES
profileSettings.profileName = $('#profile_name').val();
profileSettings.profileEmail = $('#profile_email').val();
profileSettings.profilePassword =...