feat(frontend,backend): simple navigation bar added

This commit is contained in:
2026-09-30 17:01:53 +04:00
parent e13d45401f
commit a831ec2546
5 changed files with 195 additions and 39 deletions
+32 -5
View File
@@ -3,20 +3,47 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Disk Checker</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css"
rel="stylesheet">
<title>Disk Checker - {% block title %}Home{% endblock %}</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">
<script src="https://unpkg.com/htmx.org@1.9.10"></script>
<link rel="stylesheet" href="/static/css/style.css">
{% block extra_css %}{% endblock %}
</head>
<body>
<!-- Navigation Bar -->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container">
<a class="navbar-brand" href="/">Disk Checker</a>
<!-- Logo / Brand -->
<a class="navbar-brand" href="/">
<i class="bi bi-hdd-stack"></i>
Disk Checker
</a>
<!-- Mobile toggle -->
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<!-- Navigation Tabs -->
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
{% for nav_item in navigation %}
<li class="nav-item">
<a class="nav-link {% if active_tab == nav_item.name %}active{% endif %}"
href="{{ nav_item.url }}">
<i class="bi {{ nav_item.icon }}"></i>
{{ nav_item.label }}
</a>
</li>
{% endfor %}
</ul>
</div>
</div>
</nav>
<div class="container">
<!-- Page Content -->
<div class="container mt-4">
{% block content %}{% endblock %}
</div>
+23
View File
@@ -0,0 +1,23 @@
{% extends "base.html" %}
{% block title %}Benchmark{% endblock %}
{% block content %}
<div class="row">
<div class="col-12">
<h2>Benchmark</h2>
<p class="text-muted">Configure and run disk benchmarks.</p>
<!-- Placeholder content - will be implemented later -->
<div class="card">
<div class="card-body">
<h5 class="card-title">Select Drive</h5>
<p class="card-text">Choose a drive to benchmark from the list below.</p>
<!-- Drive selection will go here -->
<div id="drive-selector"></div>
</div>
</div>
</div>
</div>
{% endblock %}
+39 -33
View File
@@ -1,44 +1,50 @@
{% extends "base.html" %}
{% block title %}Home{% endblock %}
{% block content %}
<div class="container mt-4">
<div class="row">
<div class="col-12">
<!--Available tools section-->
<h2>Available Benchmarking Tools</h2>
<!--Available tools section-->
<h2>Available Benchmarking Tools</h2>
<!-- Server-side rendered tools -->
{% if tools %}
<div class="row">
{% for tool_name, tool in tools.items() %}
<div class="col-md-4 mb-3">
<div class="card {% if tool.available %}border-success{% else %}border-secondary{% endif %}">
<div class="card-body">
<h5 class="card-title">{{ tool.name }}</h5>
<p class="card-text">
{% if tool.available %}
<span class="badge bg-success">Available</span>
{% if tool.version %}
<small class="text-muted">{{ tool.version }}</small>
{% endif %}
{% else %}
<span class="badge bg-secondary">Not Installed</span>
{% endif %}
</p>
<!-- Server-side rendered tools -->
{% if tools %}
<div class="row">
{% for tool_name, tool in tools.items() %}
<div class="col-md-4 mb-3">
<div class="card {% if tool.available %}border-success{% else %}border-secondary{% endif %}">
<div class="card-body">
<h5 class="card-title">{{ tool.name }}</h5>
<p class="card-text">
{% if tool.available %}
<span class="badge bg-success">Available</span>
{% if tool.version %}
<small class="text-muted">{{ tool.version }}</small>
{% endif %}
{% else %}
<span class="badge bg-secondary">Not Installed</span>
{% endif %}
</p>
</div>
</div>
</div>
{% endfor %}
</div>
{% endfor %}
</div>
{% endif %}
{% endif %}
<!--Available drives section-->
<h2 class="mt-5">Available Drives</h2>
<p class="text-muted">
<i class="bi bi-info-circle"></i>
Mounted drives are grayed out and cannot be benchmarked.
</p>
<div id="drives-list" hx-get="/api/v1/drives" hx-trigger="load" hx-target="#drives-content"></div>
<div id="drives-content" class="row"></div>
<!--Available drives section-->
<h2 class="mt-5">Available Drives</h2>
<p class="text-muted">
<i class="bi bi-info-circle"></i>
Mounted drives are grayed out and cannot be benchmarked.
</p>
<div id="drives-list"
hx-get="/api/v1/drives"
hx-trigger="load"
hx-target="#drives-content"></div>
<div id="drives-content" class="row"></div>
</div>
</div>
{% endblock %}
+54
View File
@@ -0,0 +1,54 @@
{% extends "base.html" %}
{% block title %}Job Queue{% endblock %}
{% block content %}
<div class="row">
<div class="col-12">
<h2>Job Queue</h2>
<p class="text-muted">Monitor and manage benchmark jobs.</p>
<!-- Jobs list -->
<div id="jobs-list"
hx-get="/api/v1/jobs"
hx-trigger="load"
hx-target="#jobs-content">
<p>Loading jobs...</p>
</div>
<div id="jobs-content"></div>
</div>
</div>
{% endblock %}
{% block extra_js %}
<script>
// Load jobs when page loads
document.addEventListener('htmx:afterRequest', function(evt) {
if (evt.detail.target.id === 'jobs-content') {
renderJobs(JSON.parse(evt.detail.xhr.response));
}
});
function renderJobs(jobIds) {
const container = document.getElementById('jobs-content');
container.innerHTML = '';
if (!jobIds || jobIds.length === 0) {
container.innerHTML = '<div class="alert alert-info">No jobs in queue.</div>';
return;
}
jobIds.forEach(jobId => {
const div = document.createElement('div');
div.className = 'card mb-2';
div.innerHTML = `
<div class="card-body">
<h5 class="card-title">${jobId}</h5>
<p class="card-text text-muted">Job details will appear here...</p>
</div>
`;
container.appendChild(div);
});
}
</script>
{% endblock %}