kaauh_ats/templates/base.html
2025-10-06 16:23:40 +03:00

560 lines
25 KiB
HTML

{% comment %} {% load static i18n %}
<!DOCTYPE html>
<html lang="{% if request.LANGUAGE_CODE %}{{ request.LANGUAGE_CODE }}{% else %}en{% endif %}">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}NorahUniversity ATS{% endblock %}</title>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<script type="module" src="https://cdn.jsdelivr.net/gh/starfederation/datastar@1.0.0-RC.5/bundles/datastar.js"></script>
{% comment %} <script src="https://unpkg.com/htmx.org@2.0.3/dist/htmx.min.js"></script> {% endcomment %}
{% comment %} <meta name="csrf-token" content="{{ csrf_token }}"> {% endcomment %}
<!-- FilePond CSS -->
{% comment %} <link href="https://unpkg.com/filepond/dist/filepond.css" rel="stylesheet">
<link href="https://unpkg.com/filepond-plugin-image-preview/dist/filepond-plugin-image-preview.css" rel="stylesheet">
<link rel="stylesheet" href="{% static 'css/style.css' %}">
{% block extra_css %}{% endblock %}
</head>
<body> {% endcomment %}
{% comment %} <header class="header">
<div class="container">
<div class="d-flex justify-content-between align-items-center py-3">
<div class="logo h4 mb-0">NorahUniversity ATS</div>
<div class="user-info d-flex align-items-center gap-3">
{% if user.is_authenticated %}
<span class="text-muted">{{ user.username }}</span>
<a href="{% url 'account_logout' %}" class="btn btn-outline-secondary btn-sm">
<span class="d-flex align-items-center gap-1">
{% include "icons/logout.html" %}
Logout
</span>
</a>
{% else %}
<a href="{% url 'account_login' %}" class="btn btn-primary btn-sm">{% trans "Login" %}</a>
{% endif %}
</div>
</div>
</div>
</header> {% endcomment %}
{% comment %}
<nav class="navbar navbar-expand-lg navbar-light border-bottom">
<div class="container">
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav me-auto">
<li class="nav-item">
<a class="nav-link {% if request.resolver_match.url_name == 'dashboard' %}active{% endif %}" href="{% url 'dashboard' %}">
<span class="d-flex align-items-center gap-2">
{% include "icons/dashboard.html" %}
Dashboard
</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link {% if request.resolver_match.url_name == 'job_list' %}active{% endif %}" href="{% url 'job_list' %}">
<span class="d-flex align-items-center gap-2">
{% include "icons/jobs.html" %}
Jobs
</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link {% if request.resolver_match.url_name == 'candidate_list' %}active{% endif %}" href="{% url 'candidate_list' %}">
<span class="d-flex align-items-center gap-2">
{% include "icons/users.html" %}
Candidates
</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link {% if request.resolver_match.url_name == 'training_list' %}active{% endif %}" href="{% url 'training_list' %}">
<span class="d-flex align-items-center gap-2">
<svg class="heroicon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
</svg>
Training
</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link {% if request.resolver_match.url_name == 'list_meetings' %}active{% endif %}" href="{% url 'list_meetings' %}">
<span class="d-flex align-items-center gap-2">
{% include "icons/meeting.html" %}
Meetings
</span>
</a>
</li>
</ul>
</div>
</div>
</nav> {% endcomment %}
{% comment %} <main class="container my-4">
{% if messages %}
<div class="messages">
{% for message in messages %}
<div class="alert alert-{{ message.tags }} alert-dismissible fade show" role="alert">
{{ message }}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
{% endfor %}
</div>
{% endif %}
{% block content %}
{% endblock %}
</main> {% endcomment %}
<!-- Delete Modal -->
{% comment %} {% include 'includes/delete_modal.html' %} {% endcomment %}
{% comment %} <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<script>
const csrfToken = "{{ csrf_token }}";
const staticUrl = "{% static '' %}";
</script>
<!-- JavaScript Libraries -->
<script src="https://unpkg.com/petite-vue" defer init></script>
<script src="https://cdn.jsdelivr.net/npm/sortablejs@1.15.0/Sortable.min.js"></script>
<script src="https://unpkg.com/filepond/dist/filepond.js"></script>
<script src="https://unpkg.com/filepond-plugin-image-preview/dist/filepond-plugin-image-preview.js"></script>
<script src="https://unpkg.com/filepond-plugin-file-validate-type/dist/filepond-plugin-file-validate-type.js"></script>
<script src="https://unpkg.com/filepond-plugin-file-validate-size/dist/filepond-plugin-file-validate-size.js"></script>
<script src="{% static 'js/modal_handlers.js' %}"></script>
<script>
// Initialize tooltips
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl)
});
</script>
{% block extra_js %}{% endblock %} {% endcomment %}
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="King Abdullah Academic University Hospital - Applicant Tracking System">
<title>{% block title %}University ATS{% endblock %}</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css">
<link href="https://unpkg.com/filepond/dist/filepond.css" rel="stylesheet">
<link href="https://unpkg.com/filepond-plugin-image-preview/dist/filepond-plugin-image-preview.css" rel="stylesheet">
<link rel="stylesheet" href="{% static 'css/style.css' %}">
<style>
:root {
--kaauh-teal: #00636e;
--kaauh-teal-dark: #004a53;
--kaauh-light-bg: #f9fbfd;
--kaauh-border: #eaeff3;
}
/* === Top Bar === */
.top-bar {
background-color: white;
border-bottom: 1px solid var(--kaauh-border);
font-size: 0.825rem;
padding: 0.4rem 0;
}
.top-bar a { text-decoration: none; }
.top-bar .social-icons i {
color: var(--kaauh-teal);
transition: color 0.2s;
}
.top-bar .social-icons i:hover {
color: var(--kaauh-teal-dark);
}
.top-bar .contact-item {
display: flex;
align-items: center;
gap: 0.35rem;
padding: 0.25rem 0.5rem;
}
.top-bar .logo-container img {
height: 50px;
object-fit: contain;
}
@media (max-width: 767.98px) {
.top-bar .logo-container {
order: -1;
margin-bottom: 0.5rem;
}
.top-bar .contact-info {
justify-content: center;
}
}
/* === Navbar === */
.navbar-brand {
font-weight: 700;
letter-spacing: -0.5px;
font-size: 1.35rem;
}
.navbar-dark {
background-color: var(--kaauh-teal) !important;
box-shadow: 0 2px 6px rgba(0,0,0,0.12);
}
.nav-link {
font-weight: 500;
transition: all 0.2s ease;
}
.nav-link:hover,
.nav-link.active {
color: white !important;
background: rgba(255,255,255,0.12) !important;
border-radius: 4px;
}
/* Dropdown */
.dropdown-menu {
border: none;
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
border-radius: 6px;
padding: 0.5rem 0;
min-width: 200px;
}
.dropdown-item {
padding: 0.5rem 1.25rem;
}
.dropdown-item:hover {
background-color: rgba(0, 99, 110, 0.08);
}
@media (min-width: 992px) {
/* This hover effect is what overrides the click for desktop */
/* For the profile dropdown, we generally want the click behavior,
so let's make sure it doesn't have the desktop hover override.
The current CSS applies to all .dropdown:hover, which is fine,
but we should rely on Bootstrap's JS for this one. */
/* Removed unnecessary desktop hover override for this specific context
or ensured it works by click */
.dropdown:hover > .dropdown-menu {
display: block;
margin-top: 0;
}
.dropdown-menu {
display: block !important;
opacity: 0;
visibility: hidden;
transform: translateY(8px);
transition: opacity 0.25s, transform 0.25s;
}
.dropdown:hover .dropdown-menu {
opacity: 1;
visibility: visible;
transform: translateY(0);
}
}
/* === Job Table === */
.job-table-wrapper {
background: white;
border-radius: 10px;
overflow: hidden;
box-shadow: 0 4px 16px rgba(0,0,0,0.06);
margin-bottom: 2rem;
}
.job-table thead th {
background: var(--kaauh-teal);
color: white;
font-weight: 600;
padding: 1rem;
text-align: center;
}
.job-table td {
padding: 1rem;
vertical-align: middle;
text-align: center;
}
.job-table tr:hover td {
background-color: rgba(0, 99, 110, 0.03);
}
.btn-apply {
background: var(--kaauh-teal);
border: none;
color: white;
padding: 0.45rem 1rem;
font-weight: 600;
border-radius: 6px;
transition: all 0.2s;
}
.btn-apply:hover {
background: var(--kaauh-teal-dark);
transform: translateY(-1px);
box-shadow: 0 2px 6px rgba(0,0,0,0.15);
}
/* === Footer & Alerts === */
.footer {
background: var(--kaauh-light-bg);
padding: 2rem 0;
border-top: 1px solid var(--kaauh-border);
font-size: 0.95rem;
color: #555;
}
.alert {
border: none;
border-radius: 8px;
box-shadow: 0 2px 6px rgba(0,0,0,0.05);
}
main.container {
min-height: calc(100vh - 220px);
padding: 2rem 0;
}
/* === Profile Avatar === */
.profile-avatar {
width: 38px;
height: 38px;
border-radius: 50%;
background: white;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-weight: bold;
font-size: 0.9rem;
}
/* Ensures the dropdown-toggle style is minimal for the avatar */
.navbar-nav .dropdown-toggle.p-0::after {
display: none;
}
</style>
{% block customCSS %}{% endblock %}
</head>
<body class="d-flex flex-column min-vh-100">
<div class="top-bar">
<div class="container d-flex flex-wrap justify-content-between align-items-center gap-2">
<div class="d-flex align-items-center gap-3 social-icons">
<span class="text-muted d-none d-sm-inline">Follow Us:</span>
<a href="#" aria-label="Facebook"><i class="fab fa-facebook-f"></i></a>
<a href="#" aria-label="Twitter"><i class="fab fa-twitter"></i></a>
<a href="#" aria-label="Instagram"><i class="fab fa-instagram"></i></a>
</div>
<div class="contact-info d-flex flex-wrap justify-content-center gap-2">
<div class="contact-item">
<i class="fas fa-envelope text-primary"></i>
<span class="d-none d-sm-inline">info@kaauh.edu.sa</span>
</div>
<div class="contact-item">
<i class="fas fa-phone text-primary"></i>
<span class="d-none d-sm-inline">+966 11 820 0000</span>
</div>
</div>
<div class="logo-container d-flex gap-2">
<img src="{% static 'image/vision.svg' %}" alt="Saudi Vision 2030" loading="lazy">
<img src="{% static 'image/hospital_logo_3.png' %}" alt="King Abdullah Academic University Hospital" loading="lazy">
</div>
</div>
</div>
<nav class="navbar navbar-expand-lg navbar-dark sticky-top">
<div class="container d-flex align-items-center">
<a class="navbar-brand text-white" href="#">
<i class="fas fa-hospital me-1"></i> KAAUH ATS
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav me-auto">
<li class="nav-item">
<a class="nav-link {% if request.resolver_match.url_name == 'dashboard' %}active{% endif %}" href="{% url 'dashboard' %}">
<span class="d-flex align-items-center gap-2">
{% include "icons/dashboard.html" %}
Dashboard
</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link {% if request.resolver_match.url_name == 'job_list' %}active{% endif %}" href="{% url 'job_list' %}">
<span class="d-flex align-items-center gap-2">
{% include "icons/jobs.html" %}
Jobs
</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link {% if request.resolver_match.url_name == 'candidate_list' %}active{% endif %}" href="{% url 'candidate_list' %}">
<span class="d-flex align-items-center gap-2">
{% include "icons/users.html" %}
Candidates
</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link {% if request.resolver_match.url_name == 'training_list' %}active{% endif %}" href="{% url 'training_list' %}">
<span class="d-flex align-items-center gap-2">
<svg class="heroicon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
</svg>
Training
</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link {% if request.resolver_match.url_name == 'list_meetings' %}active{% endif %}" href="{% url 'list_meetings' %}">
<span class="d-flex align-items-center gap-2">
{% include "icons/meeting.html" %}
Meetings
</span>
</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown">Meeting & Schedule</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#"><i class="fas fa-calendar me-2"></i> Meetings</a></li>
<li><a class="dropdown-item" href="#"><i class="fas fa-clock me-2"></i> Schedule</a></li>
</ul>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown">Jobs</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#"><i class="fas fa-briefcase me-2"></i> Active Jobs</a></li>
<li><a class="dropdown-item" href="#"><i class="fas fa-file-alt me-2"></i> Draft Jobs</a></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" href="#"><i class="fas fa-list me-1"></i> Job List</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown">Candidates</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#"><i class="fas fa-users me-2"></i> All Candidates</a></li>
<li><a class="dropdown-item" href="#"><i class="fas fa-user-plus me-2"></i> New Candidates</a></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" href="#">
<i class="fas fa-plus-circle me-1"></i> Create Job
</a>
</li>
</ul>
{% if not request.session.linkedin_authenticated %}
<ul class="navbar-nav ms-auto ms-lg-0">
<li class="nav-item">
<a class="nav-link" href="{% url 'linkedin_login' %}">
<i class="fab fa-linkedin me-1"></i> Connect LinkedIn
</a>
</li>
</ul>
{% else %}
<ul class="navbar-nav ms-auto ms-lg-0">
<li class="nav-item d-none d-lg-block">
<span class="nav-link text-success">
<i class="fab fa-linkedin me-1"></i> LinkedIn Connected
</span>
</li>
</ul>
{% endif %}
</div>
<ul class="navbar-nav ms-2 ms-lg-3">
<li class="nav-item dropdown">
<a class="nav-link p-0 dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<div class="profile-avatar">
{{ user.username|first|upper }}
</div>
</a>
<ul class="dropdown-menu dropdown-menu-end py-2 shadow" style="min-width: 220px;">
<li class="px-3 py-2">
<div class="d-flex align-items-center">
<div class="me-3">
<div class="profile-avatar" style="width: 40px; height: 40px;">
{{ user.username|first|upper }}
</div>
</div>
<div>
<div class="fw-semibold">{{ user.get_full_name|default:user.username }}</div>
<div class="text-muted small">{{ user.email|truncatechars:24 }}</div>
</div>
</div>
</li>
<li><hr class="dropdown-divider my-1"></li>
<li><a class="dropdown-item py-2" href="#"><i class="fas fa-user-circle me-2 text-primary"></i> My Profile</a></li>
<li><a class="dropdown-item py-2" href="#"><i class="fas fa-cog me-2 text-primary"></i> Settings</a></li>
<li><a class="dropdown-item py-2" href="#"><i class="fas fa-history me-2 text-primary"></i> Activity Log</a></li>
<li><a class="dropdown-item py-2" href="#"><i class="fas fa-question-circle me-2 text-primary"></i> Help & Support</a></li>
<li><hr class="dropdown-divider my-1"></li>
<li>
<form method="post" action="#" class="d-inline">
{% csrf_token %}
<button type="submit" class="dropdown-item py-2 text-danger">
<i class="fas fa-sign-out-alt me-2"></i> Sign Out
</button>
</form>
</li>
</ul>
</li>
</ul>
</div>
</nav>
<main class="container flex-grow-1">
{% if messages %}
{% for message in messages %}
<div class="alert alert-{{ message.tags }} alert-dismissible fade show" role="alert">
{{ message }}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
{% endfor %}
{% endif %}
{% block content %}
{% endblock %}
</main>
<!-- Delete Modal -->
{% include 'includes/delete_modal.html' %}
<footer class="footer mt-auto">
<div class="container text-center">
<p class="mb-0">
&copy; {% now "Y" %} King Abdullah Academic University Hospital (KAAUH).<br>
<small>All rights reserved.</small>
</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', () => {
const navbarCollapse = document.getElementById('navbarNav');
const navLinks = navbarCollapse.querySelectorAll('.nav-link:not(.dropdown-toggle)');
navLinks.forEach(link => {
link.addEventListener('click', () => {
const bsCollapse = bootstrap.Collapse.getInstance(navbarCollapse);
if (bsCollapse && navbarCollapse.classList.contains('show')) {
bsCollapse.hide();
}
});
});
});
</script>
{% block customJS %}{% endblock %}
</body>
</html>