02f4c655b9
- Порт хоста по умолчанию 8080 (Chrome ERR_UNSAFE_PORT на 6000); compose, setup, config, README.
- Дашборд: одна hero-карточка, прогресс создания, POST /jobs/{id}/cancel, JobView progress_*.
- job_store: отмена и прогресс (thread-safe); cluster_lifecycle этапы и откат.
- Навигация: стили nav-pill; Swagger/ReDoc/Health через window.open.
- main.py: TemplateResponse(request, …) для Starlette.
- Документация: README, app/docs (api_routes, README); Makefile ps; .gitignore clusters.
69 lines
2.6 KiB
HTML
69 lines
2.6 KiB
HTML
{# Общий каркас страниц веб-интерфейса kind-k8s-develop.
|
|
Автор: Сергей Антропов — https://devops.org.ru #}
|
|
<!DOCTYPE html>
|
|
<html lang="ru">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<title>{% block page_title %}{{ app_title }}{% endblock %} — kind</title>
|
|
<link rel="stylesheet" href="/static/style.css" />
|
|
{% block head_extra %}{% endblock %}
|
|
</head>
|
|
<body
|
|
class="app-body"
|
|
data-api-base="/api/v1"
|
|
data-app-title="{{ app_title | e }}"
|
|
>
|
|
<a class="skip-link" href="#main-content">К основному содержимому</a>
|
|
|
|
<header class="top-nav" role="banner">
|
|
<div class="top-nav-inner">
|
|
<div class="nav-brand">
|
|
<span class="nav-logo" aria-hidden="true">◈</span>
|
|
<span class="nav-title">{{ app_title }}</span>
|
|
<span class="nav-tag muted">kind · локальные кластеры</span>
|
|
</div>
|
|
<nav class="nav-links" aria-label="Разделы">
|
|
<a href="/" class="nav-link nav-pill nav-pill--home">Панель</a>
|
|
<a href="/docs" class="nav-link nav-pill nav-pill--ext" data-open-window="kind_swagger">Swagger</a>
|
|
<a href="/redoc" class="nav-link nav-pill nav-pill--ext" data-open-window="kind_redoc">ReDoc</a>
|
|
<a href="/api/v1/health" class="nav-link nav-pill nav-pill--ext" data-open-window="kind_health">Health</a>
|
|
</nav>
|
|
</div>
|
|
</header>
|
|
|
|
<div id="toast" class="toast hidden" role="status" aria-live="polite"></div>
|
|
|
|
<main id="main-content" class="app-main" tabindex="-1">
|
|
{% block content %}{% endblock %}
|
|
</main>
|
|
|
|
<footer class="footer app-footer">
|
|
{% block footer %}
|
|
<div class="footer-inner">
|
|
<p class="muted footer-line">Данные: том <code>clusters/</code> на хосте</p>
|
|
<p class="footer-copyright">
|
|
© kind-k8s-develop ·
|
|
<a href="https://devops.org.ru" target="_blank" rel="noopener">devops.org.ru</a>
|
|
</p>
|
|
</div>
|
|
{% endblock %}
|
|
</footer>
|
|
|
|
{# Отдельное окно браузера для документации и health (не вкладка). #}
|
|
<script>
|
|
(function () {
|
|
var opts = "noopener,noreferrer,width=1240,height=840,scrollbars=yes,resizable=yes";
|
|
document.querySelectorAll(".nav-link[data-open-window]").forEach(function (a) {
|
|
a.addEventListener("click", function (e) {
|
|
e.preventDefault();
|
|
var name = a.getAttribute("data-open-window") || "kind_ext";
|
|
window.open(a.getAttribute("href"), name, opts);
|
|
});
|
|
});
|
|
})();
|
|
</script>
|
|
{% block scripts %}{% endblock %}
|
|
</body>
|
|
</html>
|