"]
diff --git a/scripts/site_markdown.py b/scripts/site_markdown.py
index 4f99d03cd..6ce944994 100644
--- a/scripts/site_markdown.py
+++ b/scripts/site_markdown.py
@@ -123,7 +123,10 @@ class _Converter(HTMLParser):
self._emit(f"**{' '.join(name.split())}:**")
self._block()
return
- if self.skip or tag in SKIPPED or attr.get("aria-hidden") == "true" \
+ # A `hidden` element is chrome the page's script shows (a filter
+ # box, the file picker, a setup's install chooser): a tab panel,
+ # hidden too, was read above.
+ if self.skip or tag in SKIPPED or attr.get("aria-hidden") == "true" or "hidden" in attr \
or classes & {"sr-only", "sl-anchor-link", "copy", "rb-anchor"}:
if tag not in ("br", "img", "hr", "input", "wbr"):
self.skip += 1
diff --git a/scripts/siteentries.py b/scripts/siteentries.py
index 7fc5dc31c..c417c74bb 100644
--- a/scripts/siteentries.py
+++ b/scripts/siteentries.py
@@ -47,12 +47,21 @@ def filter_placeholder(labels: list[str]) -> str:
def filter_box(ident: str, heading: str, labels: list[str], rows: int, noun: str = "rows") -> str:
- """The filter box rehype-stack-tables.mjs writes above a long table."""
+ """The filter box rehype-stack-tables.mjs writes above a long table.
+
+ It is `hidden` until site.ts wires it: without the script it filters
+ nothing, so a reader with no JavaScript, a text dump and the search
+ skip it while the rows stay. retrobios.css keeps its room meanwhile,
+ so the table does not move when it shows. The count is the input's
+ description, and spaces keep label, field and count apart in any text
+ read from the HTML."""
return (
- f'
', text)
# The Status column is empty on every row: not written.
@@ -210,7 +211,7 @@ class TheWantedListIsOneFilteredTable(unittest.TestCase):
self.assertIn("| Nintendo - GameCube - BIOS Images | 16 |", self.page)
def test_every_dump_is_one_row_under_a_filter_box(self):
- box = re.search(r'