Migrate remaining Component() callers to Element; delete the shim

The legacy back-compat ``Component(tag_name=...)`` function (a thin
string-returning wrapper over ``Element``) was the last piece of the
pre-node-tree API. Migrate its ~18 call sites across the views to the node
builders and remove it:

- stats_content.py: the table helpers now use the whitelisted ``Td`` / ``Th``
  / ``Tr`` builders and ``Element`` for table/tbody/thead/h1; helper return
  types are ``Node``.
- auth.py / statuschange.py / game.py / purchase.py: the hand-built
  ``<form>`` / ``<button>`` / ``<h1>`` / ``<h2>`` / ``<table>`` markup now uses
  ``Element("tag", ...)``.
- core.py: drop the ``Component()`` function and its back-compat note;
  ``common/components/__init__`` no longer exports it.
- Tests that exercised the shim now target ``Element`` directly
  (test_components cache/escaping/edge-case classes; test_node_tree drops the
  legacy-parity and legacy-bridge cases, which ``Element`` coverage subsumes).
- CLAUDE.md: drop the "legacy Component retained for back-compat" notes.

Full suite green (443; one obsolete legacy-bridge test removed).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-13 16:51:27 +02:00
parent bec7a1074c
commit 9c42d85f52
10 changed files with 79 additions and 115 deletions
+7 -7
View File
@@ -17,9 +17,9 @@ from common.components import (
AddForm,
Button,
ButtonGroup,
Component,
CsrfInput,
Div,
Element,
FilterBar,
GameStatus,
GameStatusSelector,
@@ -201,8 +201,8 @@ def _delete_game_confirmation_modal(
if not (session_count or purchase_count or playevent_count):
data_items.append(Li(children=["No associated data"]))
form = Component(
tag_name="form",
form = Element(
"form",
attributes=[
("hx-post", reverse("games:delete_game", args=[game.id])),
("hx-replace-url", "true"),
@@ -442,8 +442,8 @@ def _game_action_buttons(game: Game) -> SafeText:
edit_link = A(
href=reverse("games:edit_game", args=[game.id]),
children=[
Component(
tag_name="button",
Element(
"button",
attributes=[("type", "button"), ("class", edit_class)],
children=["Edit"],
)
@@ -456,8 +456,8 @@ def _game_action_buttons(game: Game) -> SafeText:
("hx-target", "#global-modal-container"),
],
children=[
Component(
tag_name="button",
Element(
"button",
attributes=[("type", "button"), ("class", delete_class)],
children=["Delete"],
)