gentelella
Version:
Gentelella Admin is a free to use Bootstrap admin template
602 lines (549 loc) • 38.6 kB
HTML
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- Meta, title, CSS, favicons, etc. -->
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Gentelella Alela! | </title> <!-- Compiled CSS (includes Bootstrap, Font Awesome, and all vendor styles) -->
<script type="module" src="/src/main-minimal.js"></script>
</head>
<body class="nav-md">
<div class="container body">
<div class="main_container">
<div class="col-md-3 left_col">
<div class="left_col scroll-view">
<div class="navbar nav_title" style="border: 0;">
<a href="index.html" class="site_title"><i class="fas fa-paw"></i> <span>Gentelella Alela!</span></a>
</div>
<div class="clearfix"></div>
<!-- menu profile quick info -->
<div class="profile clearfix">
<div class="profile_pic">
<img src="images/img.jpg" alt="..." class="img-circle profile_img">
</div>
<div class="profile_info">
<span>Welcome,</span>
<h2>John Doe</h2>
</div>
</div>
<!-- /menu profile quick info -->
<br />
<!-- sidebar menu -->
<div id="sidebar-menu" class="main_menu_side hidden-print main_menu">
<div class="menu_section">
<h3>General</h3>
<ul class="nav side-menu">
<li><a><i class="fas fa-home"></i> Home <span class="fas fa-chevron-down"></span></a>
<ul class="nav child_menu">
<li><a href="index.html">Dashboard 1</a></li>
<li><a href="index2.html">Dashboard 2</a></li>
<li><a href="index3.html">Dashboard 3</a></li><li><a href="index4.html">Dashboard 4</a></li>
<li><a href="index3.html">Dashboard 3</a></li>
</ul>
<li><a><i class="fas fa-edit"></i> Forms <span class="fas fa-chevron-down"></span></a>
<ul class="nav child_menu">
<li><a href="form.html">General Form</a></li>
<li><a href="form_advanced.html">Advanced Components</a></li>
<li><a href="form_validation.html">Form Validation</a></li>
<li><a href="form_wizards.html">Form Wizard</a></li>
<li><a href="form_upload.html">Form Upload</a></li>
<li><a href="form_buttons.html">Form Buttons</a></li>
</ul>
<li><a><i class="fas fa-desktop"></i> UI Elements <span class="fas fa-chevron-down"></span></a>
<ul class="nav child_menu">
<li><a href="general_elements.html">General Elements</a></li>
<li><a href="media_gallery.html">Media Gallery</a></li>
<li><a href="typography.html">Typography</a></li>
<li><a href="icons.html">Icons</a></li>
<li><a href="widgets.html">Widgets</a></li>
<li><a href="invoice.html">Invoice</a></li>
<li><a href="inbox.html">Inbox</a></li>
<li><a href="calendar.html">Calendar</a></li>
</ul>
<li><a><i class="fas fa-table"></i> Tables <span class="fas fa-chevron-down"></span></a>
<ul class="nav child_menu">
<li><a href="tables.html">Tables</a></li>
<li><a href="tables_dynamic.html">Table Dynamic</a></li>
</ul>
<li><a><i class="fas fa-chart-column"></i> Data Presentation <span class="fas fa-chevron-down"></span></a>
<ul class="nav child_menu">
<li><a href="chartjs.html">Chart JS</a></li>
<li><a href="chartjs2.html">Chart JS2</a></li>
<li><a href="chart3.html">Chart JS3</a></li>
<li><a href="echarts.html">ECharts</a></li>
<li><a href="other_charts.html">Other Charts</a></li>
</ul>
<li><a><i class="fas fa-clone"></i>Layouts <span class="fas fa-chevron-down"></span></a>
<ul class="nav child_menu">
<li><a href="fixed_sidebar.html">Fixed Sidebar</a></li>
<li><a href="fixed_footer.html">Fixed Footer</a></li>
</ul>
</ul>
</div>
<div class="menu_section">
<h3>Live On</h3>
<ul class="nav side-menu">
<li><a><i class="fas fa-bug"></i> Additional Pages <span class="fas fa-chevron-down"></span></a>
<ul class="nav child_menu">
<li><a href="e_commerce.html">E-commerce</a></li>
<li><a href="projects.html">Projects</a></li>
<li><a href="project_detail.html">Project Detail</a></li>
<li><a href="contacts.html">Contacts</a></li>
<li><a href="profile.html">Profile</a></li>
</ul>
<li><a><i class="fas fa-window-restore"></i> Extras <span class="fas fa-chevron-down"></span></a>
<ul class="nav child_menu">
<li><a href="page_403.html">403 Error</a></li>
<li><a href="page_404.html">404 Error</a></li>
<li><a href="page_500.html">500 Error</a></li>
<li><a href="plain_page.html">Plain Page</a></li>
<li><a href="login.html">Login Page</a></li>
<li><a href="pricing_tables.html">Pricing Tables</a></li>
</ul>
<li><a><i class="fas fa-sitemap"></i> Multilevel Menu <span class="fas fa-chevron-down"></span></a>
<ul class="nav child_menu">
<li><a href="#level1_1">Level One</a></li>
<li><a>Level One<span class="fas fa-chevron-down"></span></a>
<ul class="nav child_menu">
<li class="sub_menu"><a href="level2.html">Level Two</a>
<li><a href="#level2_1">Level Two</a>
<li><a href="#level2_2">Level Two</a>
</ul>
<li><a href="#level1_2">Level One</a></li>
</ul>
<li><a href="landing.html"><i class="fas fa-laptop"></i> Landing Page</a></li>
</ul>
</div>
</div>
<!-- /sidebar menu -->
<!-- /menu footer buttons -->
<div class="sidebar-footer hidden-small">
<a data-bs-toggle="tooltip" data-bs-placement="top" title="Settings">
<span class="fas fa-cog" aria-hidden="true"></span>
</a>
<a data-bs-toggle="tooltip" data-bs-placement="top" title="FullScreen">
<span class="fas fa-expand" aria-hidden="true"></span>
</a>
<a data-bs-toggle="tooltip" data-bs-placement="top" title="Lock">
<span class="fas fa-eye-slash" aria-hidden="true"></span>
</a>
<a data-bs-toggle="tooltip" data-bs-placement="top" title="Logout" href="login.html">
<span class="fas fa-power-off" aria-hidden="true"></span>
</a>
</div>
<!-- /menu footer buttons -->
</div>
</div>
<!-- top navigation -->
<div class="top_nav">
<div class="nav_menu">
<div class="nav toggle">
<a id="menu_toggle"><i class="fas fa-bars"></i></a>
</div>
<nav class="nav navbar-nav">
<ul class="navbar-right">
<li class="nav-item dropdown open" style="padding-left: 15px;">
<a href="javascript:;" class="user-profile dropdown-toggle" aria-haspopup="true" id="navbarDropdown" data-bs-toggle="dropdown" aria-expanded="false">
<img src="images/img.jpg" alt="">John Doe
</a>
<div class="dropdown-menu dropdown-usermenu float-end" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="javascript:;"> Profile</a>
<a class="dropdown-item" href="javascript:;">
<span class="badge bg-red float-end">50%</span>
<span>Settings</span>
</a>
<a class="dropdown-item" href="javascript:;">Help</a>
<a class="dropdown-item" href="login.html"><i class="fas fa-sign-out-alt float-end"></i> Log Out</a>
</div>
<li role="presentation" class="nav-item dropdown open">
<a href="javascript:;" class="dropdown-toggle info-number" id="navbarDropdown1" data-bs-toggle="dropdown" aria-expanded="false">
<i class="fas fa-envelope"></i>
<span class="badge bg-green">6</span>
</a>
<ul class="dropdown-menu list-unstyled msg_list" role="menu" aria-labelledby="navbarDropdown1">
<li class="nav-item">
<a class="dropdown-item">
<span class="image"><img src="images/img.jpg" alt="Profile Image" /></span>
<span>
<span>John Smith</span>
<span class="time">3 mins ago</span>
</span>
<span class="message">
Film festivals used to be do-or-die moments for movie makers. They were where...
</span>
</a>
<li class="nav-item">
<a class="dropdown-item">
<span class="image"><img src="images/img.jpg" alt="Profile Image" /></span>
<span>
<span>John Smith</span>
<span class="time">3 mins ago</span>
</span>
<span class="message">
Film festivals used to be do-or-die moments for movie makers. They were where...
</span>
</a>
<li class="nav-item">
<a class="dropdown-item">
<span class="image"><img src="images/img.jpg" alt="Profile Image" /></span>
<span>
<span>John Smith</span>
<span class="time">3 mins ago</span>
</span>
<span class="message">
Film festivals used to be do-or-die moments for movie makers. They were where...
</span>
</a>
<li class="nav-item">
<a class="dropdown-item">
<span class="image"><img src="images/img.jpg" alt="Profile Image" /></span>
<span>
<span>John Smith</span>
<span class="time">3 mins ago</span>
</span>
<span class="message">
Film festivals used to be do-or-die moments for movie makers. They were where...
</span>
</a>
<li class="nav-item">
<div class="text-center">
<a class="dropdown-item">
<strong>See All Alerts</strong>
<i class="fas fa-angle-right"></i>
</a>
</div>
</ul>
</ul>
</nav>
</div>
</div>
<!-- /top navigation -->
<!-- page content -->
<div class="right_col" role="main">
<div class="">
<div class="page-title">
<div class="title_left">
<h3>Form Validation</h3>
</div>
<div class="title_right">
<div class="col-md-5 col-sm-5 mb-3 float-end top_search">
<div class="input-group search-bar-fix">
<input type="text" class="form-control" placeholder="Search for...">
<button class="btn btn-outline-secondary" type="button">
<i class="fas fa-search"></i>
</button>
</div>
</div>
</div>
</div>
<div class="clearfix"></div>
<div class="row">
<div class="col-md-12 col-sm-12">
<div class="x_panel">
<div class="x_title">
<h2>Form validation <small>sub title</small></h2>
<ul class="nav navbar-right panel_toolbox">
<li><a class="collapse-link"><i class="fas fa-chevron-up"></i></a>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-bs-toggle="dropdown" role="button" aria-expanded="false"><i class="fas fa-wrench"></i></a>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<a class="dropdown-item" href="#">Settings 1</a>
<a class="dropdown-item" href="#">Settings 2</a>
</div>
<li><a class="btn-btn-close-link"><i class="fas fa-times"></i></a>
</ul>
<div class="clearfix"></div>
</div>
<div class="x_content">
<div class="alert alert-info">
<strong>Bootstrap 5 Form Validation</strong> - This form uses modern Bootstrap 5 validation with custom feedback messages and styles.
</div>
<form class="row g-3 needs-validation" novalidate>
<div class="col-md-12">
<h5 class="text-primary mb-3">Personal Information</h5>
</div>
<!-- First Name -->
<div class="col-md-6">
<label for="firstName" class="form-label">First Name <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="firstName" name="firstName" required minlength="2">
<div class="valid-feedback">
Looks good!
</div>
<div class="invalid-feedback">
Please provide a valid first name (minimum 2 characters).
</div>
</div>
<!-- Last Name -->
<div class="col-md-6">
<label for="lastName" class="form-label">Last Name <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="lastName" name="lastName" required minlength="2">
<div class="valid-feedback">
Looks good!
</div>
<div class="invalid-feedback">
Please provide a valid last name (minimum 2 characters).
</div>
</div>
<!-- Email -->
<div class="col-md-6">
<label for="email" class="form-label">Email Address <span class="text-danger">*</span></label>
<input type="email" class="form-control" id="email" name="email" required>
<div class="valid-feedback">
Email looks good!
</div>
<div class="invalid-feedback">
Please provide a valid email address.
</div>
</div>
<!-- Phone -->
<div class="col-md-6">
<label for="phone" class="form-label">Phone Number <span class="text-danger">*</span></label>
<input type="tel" class="form-control" id="phone" name="phone" required pattern="[0-9\-\+\s\(\)]{8,20}">
<div class="valid-feedback">
Phone number is valid!
</div>
<div class="invalid-feedback">
Please provide a valid phone number (8-20 characters).
</div>
</div>
<!-- Occupation -->
<div class="col-md-6">
<label for="occupation" class="form-label">Occupation</label>
<input type="text" class="form-control" id="occupation" name="occupation" minlength="3">
<div class="valid-feedback">
Great!
</div>
<div class="invalid-feedback">
Occupation must be at least 3 characters long.
</div>
</div>
<!-- Age -->
<div class="col-md-6">
<label for="age" class="form-label">Age <span class="text-danger">*</span></label>
<input type="number" class="form-control" id="age" name="age" required min="18" max="100">
<div class="valid-feedback">
Age is valid!
</div>
<div class="invalid-feedback">
Please provide a valid age (18-100).
</div>
</div>
<!-- Date of Birth -->
<div class="col-md-6">
<label for="birthDate" class="form-label">Date of Birth <span class="text-danger">*</span></label>
<input type="date" class="form-control" id="birthDate" name="birthDate" required>
<div class="valid-feedback">
Date looks good!
</div>
<div class="invalid-feedback">
Please provide your date of birth.
</div>
</div>
<!-- Gender -->
<div class="col-md-6">
<label for="gender" class="form-label">Gender <span class="text-danger">*</span></label>
<select class="form-select" id="gender" name="gender" required>
<option selected disabled value="">Choose...</option>
<option value="male">Male</option>
<option value="female">Female</option>
<option value="other">Other</option>
<option value="prefer-not-to-say">Prefer not to say</option>
</select>
<div class="valid-feedback">
Selection looks good!
</div>
<div class="invalid-feedback">
Please select a gender.
</div>
</div>
<div class="col-md-12">
<h5 class="text-primary mb-3 mt-4">Security Information</h5>
</div>
<!-- Password -->
<div class="col-md-6">
<label for="password" class="form-label">Password <span class="text-danger">*</span></label>
<div class="position-relative">
<input type="password" class="form-control pe-5" id="password" name="password" required
pattern="(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*]).{8,}"
title="Must contain at least 8 characters including uppercase, lowercase, number, and special character">
<button type="button" class="btn btn-link position-absolute end-0 top-50 translate-middle-y pe-3" id="togglePassword" style="border: none; background: none; z-index: 10;">
<i class="fas fa-eye text-muted" id="passwordIcon"></i>
</button>
</div>
<div class="valid-feedback">
Strong password!
</div>
<div class="invalid-feedback">
Password must be at least 8 characters with uppercase, lowercase, number, and special character.
</div>
</div>
<!-- Confirm Password -->
<div class="col-md-6">
<label for="confirmPassword" class="form-label">Confirm Password <span class="text-danger">*</span></label>
<div class="position-relative">
<input type="password" class="form-control pe-5" id="confirmPassword" name="confirmPassword" required>
<button type="button" class="btn btn-link position-absolute end-0 top-50 translate-middle-y pe-3" id="toggleConfirmPassword" style="border: none; background: none; z-index: 10;">
<i class="fas fa-eye text-muted" id="confirmPasswordIcon"></i>
</button>
</div>
<div class="valid-feedback">
Passwords match!
</div>
<div class="invalid-feedback">
Passwords do not match.
</div>
</div>
<div class="col-md-12">
<h5 class="text-primary mb-3 mt-4">Additional Information</h5>
</div>
<!-- Message -->
<div class="col-md-12">
<label for="message" class="form-label">Message <span class="text-danger">*</span></label>
<textarea class="form-control" id="message" name="message" rows="4" required minlength="10"></textarea>
<div class="valid-feedback">
Message looks good!
</div>
<div class="invalid-feedback">
Please provide a message (minimum 10 characters).
</div>
</div>
<!-- Terms and Conditions -->
<div class="col-12">
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="agreeTerms" required>
<label class="form-check-label" for="agreeTerms">
I agree to the <a href="#" class="text-decoration-none">Terms and Conditions</a> <span class="text-danger">*</span>
</label>
<div class="invalid-feedback">
You must agree to the terms and conditions before submitting.
</div>
</div>
</div>
<!-- Newsletter Subscription -->
<div class="col-12">
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="newsletter">
<label class="form-check-label" for="newsletter">
Subscribe to our newsletter for updates
</label>
</div>
</div>
<!-- Submit Buttons -->
<div class="col-12">
<hr class="my-4">
<button class="btn btn-primary me-2" type="submit">
<i class="fas fa-check me-2"></i>Submit Form
</button>
<button class="btn btn-secondary" type="reset">
<i class="fas fa-undo me-2"></i>Reset Form
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- /page content -->
<!-- footer content -->
<footer>
<div class="float-end">
Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
</div>
<div class="clearfix"></div>
</footer>
<!-- /footer content -->
</div>
</div>
<!-- Bootstrap 5 Form Validation JavaScript -->
<script>
// Bootstrap 5 Form Validation
(function() {
'use strict';
// Fetch all the forms we want to apply custom Bootstrap validation styles to
var forms = document.querySelectorAll('.needs-validation');
// Loop over them and prevent submission
Array.prototype.slice.call(forms).forEach(function(form) {
form.addEventListener('submit', function(event) {
if (!form.checkValidity()) {
event.preventDefault();
event.stopPropagation();
} else {
// Form is valid, you can submit it or perform other actions
event.preventDefault(); // Remove this line if you want to actually submit the form
alert('Form submitted successfully! (This is just a demo)');
}
form.classList.add('was-validated');
}, false);
// Reset form validation when reset button is clicked
form.addEventListener('reset', function(event) {
form.classList.remove('was-validated');
}, false);
});
// Password visibility toggles
const togglePassword = document.getElementById('togglePassword');
const password = document.getElementById('password');
const passwordIcon = document.getElementById('passwordIcon');
const toggleConfirmPassword = document.getElementById('toggleConfirmPassword');
const confirmPasswordField = document.getElementById('confirmPassword');
const confirmPasswordIcon = document.getElementById('confirmPasswordIcon');
// Main password toggle
if (togglePassword && password && passwordIcon) {
togglePassword.addEventListener('click', function() {
// Toggle password visibility
const type = password.getAttribute('type') === 'password' ? 'text' : 'password';
password.setAttribute('type', type);
// Toggle icon
passwordIcon.classList.toggle('fa-eye');
passwordIcon.classList.toggle('fa-eye-slash');
});
}
// Confirm password toggle
if (toggleConfirmPassword && confirmPasswordField && confirmPasswordIcon) {
toggleConfirmPassword.addEventListener('click', function() {
// Toggle password visibility
const type = confirmPasswordField.getAttribute('type') === 'password' ? 'text' : 'password';
confirmPasswordField.setAttribute('type', type);
// Toggle icon
confirmPasswordIcon.classList.toggle('fa-eye');
confirmPasswordIcon.classList.toggle('fa-eye-slash');
});
}
// Custom validation for password confirmation
if (confirmPasswordField && password) {
confirmPasswordField.addEventListener('input', function() {
if (this.value !== password.value) {
this.setCustomValidity('Passwords do not match');
} else {
this.setCustomValidity('');
}
});
password.addEventListener('input', function() {
if (confirmPasswordField.value && confirmPasswordField.value !== this.value) {
confirmPasswordField.setCustomValidity('Passwords do not match');
} else {
confirmPasswordField.setCustomValidity('');
}
});
}
// Real-time validation feedback
const inputs = document.querySelectorAll('input, select, textarea');
inputs.forEach(function(input) {
input.addEventListener('blur', function() {
if (this.btn-closest('form').classList.contains('was-validated')) {
this.checkValidity();
}
});
input.addEventListener('input', function() {
if (this.btn-closest('form').classList.contains('was-validated')) {
this.checkValidity();
}
});
});
})();
</script> <!-- Compiled JavaScript (includes jQuery, Bootstrap, and all vendor scripts) -->
</body>
</html>