Add server-rendered 1C form editor
CI / python (push) Has been cancelled
CI / rust (push) Has been cancelled

This commit is contained in:
2026-05-17 19:00:02 +03:00
parent 35dd134ebc
commit 02aa084634
6 changed files with 368 additions and 3 deletions
@@ -330,7 +330,7 @@ def render_html5_object_context(
or '<p class="muted padded">Реквизиты не найдены</p>'
)
compact_body += ''.join(_tabular_section_item(item) for item in sections[:8])
compact_body += ''.join(_ui_form_item(item) for item in ui_forms[:8])
compact_body += ''.join(_ui_form_item(project_id, item) for item in ui_forms[:8])
elif normalized_mode == "impact":
compact_body = ''.join(_integration_endpoint_item(item) for item in integration_items[:8])
compact_body += ''.join(_named_node_item("command", item) for item in commands[:8])
@@ -351,7 +351,7 @@ def render_html5_object_context(
or '<p class="muted padded">Реквизиты не найдены</p>'
)
compact_body += ''.join(_tabular_section_item(item) for item in sections[:4])
compact_body += ''.join(_ui_form_item(item) for item in ui_forms[:4])
compact_body += ''.join(_ui_form_item(project_id, item) for item in ui_forms[:4])
compact_body += ''.join(_role_access_item(item) for item in grants[:6])
compact_body += ''.join(_integration_endpoint_item(item) for item in integration_items[:4])
compact_body += ''.join(_named_node_item("command", item) for item in commands[:6])
@@ -659,12 +659,13 @@ def _role_access_item(grant: object) -> str:
"""
def _ui_form_item(form_semantics: object) -> str:
def _ui_form_item(project_id: str, form_semantics: object) -> str:
form = getattr(form_semantics, "form", None)
commands = getattr(form_semantics, "commands", []) or []
elements = getattr(form_semantics, "elements", []) or []
handlers = getattr(form_semantics, "command_handlers", {}) or {}
form_name = getattr(form, "qualified_name", None) or getattr(form, "name", "form")
form_lineage = str(getattr(form, "lineage_id", "") or "")
command_names = [
str(getattr(command, "name", getattr(command, "qualified_name", "")))
for command in commands[:3]
@@ -684,6 +685,15 @@ def _ui_form_item(form_semantics: object) -> str:
<article class="object-context-item" data-html5-object-context-item="ui-form">
<strong>{escape(str(form_name))}</strong>
<small>{escape(" · ".join(details) or "UI metadata")}</small>
<span class="inline-actions">
<a
href="/html5/projects/{quote(project_id)}/forms/editor?form={quote(form_lineage, safe='')}"
hx-get="/html5/projects/{quote(project_id)}/forms/editor?form={quote(form_lineage, safe='')}"
hx-target="body"
hx-swap="outerHTML"
data-html5-form-editor-link
>Редактор формы</a>
</span>
</article>
"""