UI: навигация, документация, favicon; журнал развёртывания; валидация формы

- Меню API: ссылка «Теги образов», обёртка прокрутки пилюль, z-index и padding против обрезки hover
- Документация: ширина колонки как у дашборда (72rem)
- Favicon SVG + GET /favicon.ico, link в base.html
- provision_log.json, GET .../provision-log, кнопка в таблице кластеров
- Валидация create: имя, workers, тег kindest; модалка alert
- Прочие правки из сессии (clusters, job_store, стили, шаблоны)
This commit is contained in:
Sergey Antropoff
2026-04-04 08:15:15 +03:00
parent 6f3daa33ec
commit 4546f50aef
19 changed files with 723 additions and 103 deletions
+25 -8
View File
@@ -5,6 +5,8 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" href="/static/favicon.svg" type="image/svg+xml" />
<link rel="alternate icon" href="/favicon.ico" />
<title>{% block page_title %}{{ app_title }}{% endblock %} — kind</title>
{# Тема до первой отрисовки: localStorage kind_k8s_theme или prefers-color-scheme #}
<script>
@@ -52,8 +54,11 @@
</a>
{# Один ряд flex: Панель, Документация, API, тема — общий align-items: center #}
<nav class="nav-links top-nav-actions" aria-label="Разделы и оформление">
<a href="/" class="nav-link nav-pill{% if nav_active|default('') == 'panel' %} nav-pill--active{% endif %}">Панель</a>
<a href="/documentation" class="nav-link nav-pill{% if nav_active|default('') == 'documentation' %} nav-pill--active{% endif %}">Документация</a>
{# Прокрутка только у пилюль: overflow-x на nav обрезал бы выпадающее меню API (position: absolute). #}
<div class="nav-links-scroll">
<a href="/" class="nav-link nav-pill{% if nav_active|default('') == 'panel' %} nav-pill--active{% endif %}">Панель</a>
<a href="/documentation" class="nav-link nav-pill{% if nav_active|default('') == 'documentation' %} nav-pill--active{% endif %}">Документация</a>
</div>
<div class="nav-dropdown">
<button
type="button"
@@ -90,6 +95,16 @@
data-open-window="kind_health"
>Health</a>
</li>
<li role="none">
<a
role="menuitem"
href="https://hub.docker.com/r/kindest/node/tags"
class="nav-dropdown__link nav-pill--ext"
target="_blank"
rel="noopener noreferrer"
title="Список тегов kindest/node на Docker Hub (новое окно)"
>Теги образов</a>
</li>
</ul>
</div>
<button type="button" id="theme-toggle" class="theme-toggle theme-toggle--nav-end">
@@ -199,12 +214,14 @@
});
});
document.addEventListener("click", function () {
closeApiMenu();
});
dd.addEventListener("click", function (e) {
e.stopPropagation();
});
/* Закрытие по клику вне блока API (фаза capture: не конфликтует с открытием по кнопке). */
document.addEventListener(
"click",
function (e) {
if (!dd.contains(e.target)) closeApiMenu();
},
true,
);
document.addEventListener("keydown", function (e) {
if (e.key === "Escape") closeApiMenu();