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:
+11
-2
@@ -16,8 +16,8 @@ import os
|
||||
from contextlib import asynccontextmanager
|
||||
from pathlib import Path
|
||||
|
||||
from fastapi import FastAPI, Request
|
||||
from fastapi.responses import HTMLResponse, RedirectResponse
|
||||
from fastapi import FastAPI, HTTPException, Request
|
||||
from fastapi.responses import FileResponse, HTMLResponse, RedirectResponse
|
||||
from fastapi.staticfiles import StaticFiles
|
||||
from fastapi.templating import Jinja2Templates
|
||||
|
||||
@@ -96,6 +96,15 @@ async def ui_redirect() -> RedirectResponse:
|
||||
return RedirectResponse(url="/", status_code=307)
|
||||
|
||||
|
||||
@app.get("/favicon.ico", include_in_schema=False)
|
||||
async def favicon_ico() -> FileResponse:
|
||||
"""Браузеры по умолчанию запрашивают ``/favicon.ico``; отдаём SVG в стиле логотипа Kubernetes."""
|
||||
path = _static_dir / "favicon.svg"
|
||||
if not path.is_file():
|
||||
raise HTTPException(status_code=404, detail="favicon не найден")
|
||||
return FileResponse(path, media_type="image/svg+xml", filename="favicon.ico")
|
||||
|
||||
|
||||
@app.get("/documentation", response_class=HTMLResponse, summary="Документация (README)")
|
||||
async def documentation_page(request: Request) -> HTMLResponse:
|
||||
"""Оболочка страницы: Markdown подгружается с ``GET /api/v1/docs/readme``, рендер в браузере (marked + DOMPurify из ``/static/js/vendor/``)."""
|
||||
|
||||
Reference in New Issue
Block a user