You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

313 lines
10 KiB

10 months ago
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Skyonn Recruiting Portal</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css" integrity="sha512-z3gLpd7yknf1YoNbCzqRKc4qyor8gaKU1qmn+CShxbuBusANI9QpRohGBreCFkKxLhei6S9CQXFEbbKuqLg0DA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
<style>
body {
font-family: Arial;
}
.container {
width: 20rem;
margin: auto;
border: 1px solid black;
padding: 20px;
border-radius: 10px;
margin-top: 50px;
position: relative;
}
.input-group {
margin-bottom: 10px;
}
.input-group input[type="text"],
.input-group input[type="password"],
.input-group input[type="email"],
.input-group select {
width: calc(100% - 22px);
border-radius: 5px;
padding: 10px;
box-sizing: border-box;
display: block;
margin-bottom: 5px;
font-weight: bold;
}
button {
background-color: white;
color: black;
padding: 5px;
border-radius: 5px;
margin: 3px 0;
width: 100%;
font-size: 15px;
background-color:#66D3FA;
}
h2 {
color: black;
text-align: center;
margin-top: -5px;
margin-bottom: 20px;
}
.toggle-form {
text-align: center;
margin-top: 20px;
}
.toggle-form a {
color: #3C99DC;
text-decoration: none;
}
.footer-text {
position: absolute;
bottom: 0;
width: 100%;
text-align: center;
color: #3C99DC;
margin-bottom: 10px;
}
2 weeks ago
.eye-icon {
position: absolute;
right: 50px;
top: 48%;
transform: translateY(-50%);
cursor: pointer;
font-size: 15px;
color: #999;
}
10 months ago
</style>
</head>
<body>
<div class="container">
<h2>Skyonn Recruiting Portal</h2>
<div id="login-form">
2 weeks ago
<form id="loginForm" action="{% url 'user_login' %}" method="post">
10 months ago
{% csrf_token %}
<div class="input-group">
2 weeks ago
<input type="text" placeholder="Email" id="PhoneField" name="phone" required>
10 months ago
</div>
2 weeks ago
<div class="input-group">
<input type="password" placeholder="Password" name="password" id="passwordField" required>
<span id="togglePassword" class="eye-icon" style="color:black;"><i class="fa fa-eye"></i></span>
</div>
<button type="button" id="submitButton" onclick="userLogin()">Login</button>
10 months ago
</form>
<div class="toggle-form">
<p>New user? <a href="#" onclick="toggleForms('signup-form')">Sign Up</a></p>
</div>
</div>
<div id="signup-form" style="display: none;">
<form method="post" action="{% url 'create_user' %}" enctype="multipart/form-data">
{% csrf_token %}
<div class="input-group">
<label for="first_name">First Name*:</label>
<input type="text" id="first_name" name="first_name" required>
</div>
<div class="input-group">
<label for="last_name">Last Name*:</label>
<input type="text" id="last_name" name="last_name" required>
</div>
<div class="input-group">
<label for="phone">Phone no.*:</label>
<input type="text" id="phone" name="phone" required>
</div>
<div class="input-group">
<label for="phone_2">Phone no. 2:</label>
<input type="text" id="phone_2" name="phone_2">
</div>
<div class="input-group">
<label for="company_email">Company Email*:</label>
<input type="email" id="company_email" name="company_email" required>
</div>
<div class="input-group">
<label for="personal_email">Personal Email*:</label>
<input type="email" id="personal_email" name="personal_email" required>
</div>
<div class="input-group">
<label for="address">Address*:</label>
<input type="text" id="address" name="address" required>
</div>
<div class="input-group">
<label for="work_location">Work Location*:</label>
<input type="text" id="work_location" name="work_location" required>
</div>
<div class="input-group">
<label for="role">Role*:</label>
<select id="role" name="role" required>
<option value="recruiter">Recruiter</option>
<option value="manager">Manager</option>
</select>
</div>
<div class="input-group">
<label for="password">Password*:</label>
<input type="password" id="password" name="password" required>
</div>
<div class="input-group">
<label for="picture">Upload Picture *</label>
2 weeks ago
<input type="file" id="picture" name="picture" accept=".svg, .jpg, .jpeg, .png">
10 months ago
</div>
<input type="submit" value="Create Account" name="signup-form">
</form>
<div class="toggle-form">
<p>Already have an account? <a href="#" onclick="toggleForms('login-form')">Login</a></p>
</div>
</div>
</div>
<script>
2 weeks ago
const togglePassword = document.querySelector('#togglePassword');
const passwordField = document.querySelector('#password');
togglePassword.addEventListener('click', function () {
const type = passwordField.getAttribute('type') === 'password' ? 'text' : 'password';
passwordField.setAttribute('type', type);
const icon = this.querySelector('i');
icon.classList.toggle('fa-eye');
icon.classList.toggle('fa-eye-slash');
});
10 months ago
function toggleForms(formId) {
var signupForm = document.getElementById('signup-form');
var loginForm = document.getElementById('login-form');
if (formId === 'signup-form') {
signupForm.style.display = 'block';
loginForm.style.display = 'none';
} else {
signupForm.style.display = 'none';
loginForm.style.display = 'block';
}
}
2 weeks ago
document.addEventListener('DOMContentLoaded', function () {
const form = document.getElementById('loginForm');
const phoneField = document.getElementById('PhoneField');
const passwordField = document.getElementById('passwordField');
const clearValidation = (field) => {
field.setCustomValidity('');
field.style.borderColor = '';
};
phoneField.addEventListener('input', () => {
clearValidation(phoneField);
});
passwordField.addEventListener('input', () => {
clearValidation(passwordField);
});
// Function to perform AJAX validation
const validateField = (field, fieldName) => {
const formData = new FormData();
formData.append(fieldName, field.value.trim());
fetch(form.action, { // Replace with your actual login URL
method: 'POST',
body: formData,
headers: {
'X-CSRFToken': '{{csrf_token}}'
}
})
.then(response => response.json())
.then(data => {
clearValidation(field); // Clear previous validation
if (data.error) {
field.setCustomValidity(data.error);
field.reportValidity();
} else {
field.style.borderColor = 'green'; // Show success feedback
field.setCustomValidity(''); // Clear any errors
}
})
.catch(error => {
console.error('Error:', error);
});
};
// Trigger validation on blur for phone number
phoneField.addEventListener('blur', () => {
if (phoneField.value.trim()) {
validateField(phoneField, 'phone');
}
});
// Trigger validation on blur for password (only if phone is valid)
passwordField.addEventListener('blur', () => {
if (phoneField.value.trim() && passwordField.value.trim()) {
const formData = new FormData();
formData.append('phone', phoneField.value.trim());
formData.append('password', passwordField.value.trim());
fetch(form.action, { // Replace with your actual login URL
method: 'POST',
body: formData,
headers: {
'X-CSRFToken': '{{csrf_token}}'
}
})
.then(response => response.json())
.then(data => {
clearValidation(passwordField); // Clear previous validation
if (data.error) {
passwordField.setCustomValidity(data.error);
passwordField.reportValidity();
} else {
passwordField.setCustomValidity('');
}
})
.catch(error => {
console.error('Error:', error);
});
}
});
window.userLogin = function() {
const form = document.getElementById('loginForm');
const formData = new FormData(form);
fetch(form.action, {
method: 'POST',
body: formData,
headers: {
'X-CSRFToken': '{{csrf_token}}'
}
})
.then(response => response.json())
.then(data => {
if (data.error) {
if (data.error.includes('phone number')) {
phoneField.setCustomValidity(data.error);
phoneField.reportValidity();
} else if (data.error.includes('password')) {
passwordField.setCustomValidity(data.error);
passwordField.reportValidity();
}
} else if (data.success) {
window.location.href = data.redirect_url;
}
})
.catch(error => {
console.error('Error:', error);
});
}
});
10 months ago
</script>
</body>
</html>