Критические фиксы: - main.py: монтировать /static из web/static/ (CSS не грузился совсем) - api/scans.py: filtered total count (был всегда общий, игнорируя фильтры) - web/routes.py: исправлен VALID_SORT_FIELDS (отсутствовали ключи packages) - web/routes.py: filtered total count для web scans list - package_detail.html: f.data.X вместо f.X (findings не отображались) Чистка мёртвого кода: - config.py: удалён _parse_repos и nexus_repositories (не использовались) - web/routes.py: удалён completed_scans/failed_scans (не отображались) - удалён мёртвый guarddog_nexus/static/style.css (67-байтный стаб) Качество кода: - web/routes.py: Jinja2 Environment кэшируется на уровне модуля - Вынесен дублирующийся JS в web/static/app.js - Вынесены дублирующиеся inline-стили в CSS-классы - Исправлен duplicate class attribute в списках - Удалены гигантские SVG из empty states Тесты: - 20 новых edge-case тестов (CSV export, search/filter/sort, 404, pagination) - Добавлен sample_flagged_scan fixture - Итого: 50 тестов, все зелёные
28 lines
993 B
HTML
28 lines
993 B
HTML
<!DOCTYPE html>
|
|
<html lang="en" data-theme="dark">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>{% block title %}GuardDog Nexus{% endblock %}</title>
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css">
|
|
<script src="https://unpkg.com/htmx.org@2.0.4"></script>
|
|
<link rel="stylesheet" href="/static/style.css">
|
|
<script src="/static/app.js"></script>
|
|
</head>
|
|
<body>
|
|
<main class="container">
|
|
<nav class="sticky">
|
|
<ul><li><strong><a href="/">GuardDog Nexus</a></strong></li></ul>
|
|
<ul>
|
|
<li><a href="/">Dashboard</a></li>
|
|
<li><a href="/scans">Scans</a></li>
|
|
<li><a href="/packages">Packages</a></li>
|
|
</ul>
|
|
</nav>
|
|
{% block breadcrumbs %}{% endblock %}
|
|
{% block content %}{% endblock %}
|
|
</main>
|
|
{% block scripts %}{% endblock %}
|
|
</body>
|
|
</html>
|