Add HTML5 authoring diff preview
This commit is contained in:
@@ -371,6 +371,25 @@ def render_html5_authoring_preview(project_id: str, preview: object | None, erro
|
||||
<button type="submit">Preview</button>
|
||||
</form>
|
||||
{render_html5_authoring_preview_result(project_id)}
|
||||
<form
|
||||
class="authoring-preview-form"
|
||||
data-html5-authoring-diff-form
|
||||
method="post"
|
||||
action="/html5/projects/{quote(project_id)}/authoring/semantic-diff-preview"
|
||||
hx-post="/html5/projects/{quote(project_id)}/authoring/semantic-diff-preview"
|
||||
hx-target="[data-html5-authoring-diff-result]"
|
||||
hx-swap="outerHTML"
|
||||
>
|
||||
<input name="routine_name" placeholder="routine_name" />
|
||||
<input name="source_path" placeholder="source_path" />
|
||||
<input name="task_id" placeholder="task_id" />
|
||||
<input name="session_id" placeholder="session_id" />
|
||||
<input name="user_id" placeholder="user_id" />
|
||||
<textarea name="original_text" placeholder="Original BSL"></textarea>
|
||||
<textarea name="proposed_text" placeholder="Proposed BSL"></textarea>
|
||||
<button type="submit">Diff preview</button>
|
||||
</form>
|
||||
{render_html5_authoring_diff_result(project_id)}
|
||||
</div>
|
||||
"""
|
||||
return render_html5_authoring_preview_result(project_id, preview, error)
|
||||
@@ -411,6 +430,41 @@ def render_html5_authoring_preview_result(project_id: str, preview: object | Non
|
||||
"""
|
||||
|
||||
|
||||
def render_html5_authoring_diff_result(project_id: str, preview: object | None = None, error: str | None = None) -> str:
|
||||
if preview is None and error is None:
|
||||
return '<div class="authoring-diff-result" data-html5-authoring-diff-result></div>'
|
||||
if error:
|
||||
return f"""
|
||||
<div class="authoring-diff-result" data-html5-authoring-diff-result>
|
||||
<div class="panel-title">Diff preview</div>
|
||||
<p class="muted padded">{escape(error)}</p>
|
||||
</div>
|
||||
"""
|
||||
changed = bool(getattr(preview, "changed", False))
|
||||
added = getattr(preview, "added_lines", 0)
|
||||
removed = getattr(preview, "removed_lines", 0)
|
||||
target = getattr(preview, "target", None)
|
||||
target_name = getattr(target, "qualified_name", None) or getattr(target, "name", None) or "target unavailable"
|
||||
checks = getattr(preview, "checks", []) or []
|
||||
diff = getattr(preview, "semantic_diff", []) or []
|
||||
version_preview = getattr(preview, "version_preview", None)
|
||||
next_version_id = str(getattr(version_preview, "next_version_id", ""))
|
||||
check_rows = "".join(_authoring_check_item(check) for check in checks[:8])
|
||||
diff_rows = "".join(_authoring_diff_item(line) for line in diff[:12]) or '<p class="muted padded">Diff пустой</p>'
|
||||
return f"""
|
||||
<div class="authoring-diff-result" data-html5-authoring-diff-result data-html5-project-id="{escape(project_id)}">
|
||||
<div class="panel-title">Diff preview · {'changed' if changed else 'unchanged'}</div>
|
||||
<article class="authoring-change">
|
||||
<strong>{escape(str(target_name))}</strong>
|
||||
<span>+{escape(str(added))} / -{escape(str(removed))}</span>
|
||||
<small>{escape(next_version_id or "version preview unavailable")}</small>
|
||||
</article>
|
||||
<div class="check-list">{check_rows}</div>
|
||||
<div class="diff-list">{diff_rows}</div>
|
||||
</div>
|
||||
"""
|
||||
|
||||
|
||||
def render_html5_authoring_change_detail(project_id: str, preview: object | None) -> str:
|
||||
if preview is None:
|
||||
return f"""
|
||||
|
||||
Reference in New Issue
Block a user