diff --git a/services/api-server/src/api_server/html5.py b/services/api-server/src/api_server/html5.py
index d157155..b8f37c2 100644
--- a/services/api-server/src/api_server/html5.py
+++ b/services/api-server/src/api_server/html5.py
@@ -1,75 +1,9 @@
from __future__ import annotations
from html import escape
-from typing import Iterable
from urllib.parse import quote
-def render_html5_index(projects: Iterable[object]) -> str:
- project_list = list(projects)
- return _page(
- "SFERA HTML5",
- f"""
-
-
-
-
SFERA HTML5
-
Server-first рабочее место 1С
-
Основной HTML собирает API-сервер. Браузер получает готовую страницу без React/Next runtime.
-
-
- {len(project_list)}
- проектов
-
-
-
-
- {render_html5_project_create_form()}
-
-
-
- | Проект | Статус | Snapshot | |
-
- {render_html5_project_rows(project_list)}
-
-
-
-
- """,
- )
-
-
-def render_html5_project_create_form() -> str:
- return """
-
- """
-
-
-def render_html5_project_rows(projects: Iterable[object]) -> str:
- project_rows = "\n".join(_project_row(project) for project in projects)
- if not project_rows:
- return '| Проекты пока не настроены |
'
- return project_rows
-
-
def _page(title: str, body: str) -> str:
return f"""
@@ -85,34 +19,6 @@ def _page(title: str, body: str) -> str:
"""
-def _project_row(project: object) -> str:
- project_id = str(getattr(project, "project_id", ""))
- name = str(getattr(project, "name", project_id))
- status = str(getattr(project, "status", "unknown"))
- has_snapshot = bool(getattr(project, "has_snapshot", False))
- return f"""
-
- | {escape(name)}{escape(project_id)} |
- {escape(status)} |
- {'yes' if has_snapshot else 'no'} |
-
- IDE
- Setup
-
- |
-
"""
-
-
def _project_link(project: object, active_project_id: str) -> str:
project_id = str(getattr(project, "project_id", ""))
name = str(getattr(project, "name", project_id))
diff --git a/services/api-server/src/api_server/html5_projects.py b/services/api-server/src/api_server/html5_projects.py
new file mode 100644
index 0000000..1648e89
--- /dev/null
+++ b/services/api-server/src/api_server/html5_projects.py
@@ -0,0 +1,100 @@
+from __future__ import annotations
+
+from html import escape
+from typing import Iterable
+from urllib.parse import quote
+
+from api_server.html5 import _page
+
+
+def render_html5_index(projects: Iterable[object]) -> str:
+ project_list = list(projects)
+ return _page(
+ "SFERA HTML5",
+ f"""
+
+
+
+
SFERA HTML5
+
Server-first рабочее место 1С
+
Основной HTML собирает API-сервер. Браузер получает готовую страницу без React/Next runtime.
+
+
+ {len(project_list)}
+ проектов
+
+
+
+
+ {render_html5_project_create_form()}
+
+
+
+ | Проект | Статус | Snapshot | |
+
+ {render_html5_project_rows(project_list)}
+
+
+
+
+ """,
+ )
+
+
+def render_html5_project_create_form() -> str:
+ return """
+
+ """
+
+
+def render_html5_project_rows(projects: Iterable[object]) -> str:
+ project_rows = "\n".join(_project_row(project) for project in projects)
+ if not project_rows:
+ return '| Проекты пока не настроены |
'
+ return project_rows
+
+
+def _project_row(project: object) -> str:
+ project_id = str(getattr(project, "project_id", ""))
+ name = str(getattr(project, "name", project_id))
+ status = str(getattr(project, "status", "unknown"))
+ has_snapshot = bool(getattr(project, "has_snapshot", False))
+ return f"""
+
+ | {escape(name)}{escape(project_id)} |
+ {escape(status)} |
+ {'yes' if has_snapshot else 'no'} |
+
+ IDE
+ Setup
+
+ |
+
"""
diff --git a/services/api-server/src/api_server/main.py b/services/api-server/src/api_server/main.py
index 0bd6284..81f1234 100644
--- a/services/api-server/src/api_server/main.py
+++ b/services/api-server/src/api_server/main.py
@@ -37,10 +37,7 @@ from fastapi.staticfiles import StaticFiles
from neo4j import AsyncGraphDatabase
from pydantic import BaseModel, Field
-from api_server.html5 import (
- render_html5_index,
- render_html5_project_rows,
-)
+from api_server.html5_projects import render_html5_index, render_html5_project_rows
from api_server.html5_inspector import (
render_html5_flowchart,
render_html5_object_context,