diff --git a/scripts/generate_site.py b/scripts/generate_site.py
index 69978167..a2220819 100644
--- a/scripts/generate_site.py
+++ b/scripts/generate_site.py
@@ -3207,7 +3207,7 @@ SAFE_LINK = "[Is it safe?](../index.md#is-it-safe)"
# Under "From your computer": a device with no network installs from the ZIP
# (`--from-pack`). The id is the one wiki/installer.md gives its section.
OFFLINE_LINE = ("No internet on the device? "
- "[Install from the ZIP](../wiki/installer.md#without-a-network).")
+ "[Install from the ZIP](../wiki/installer.md#without-a-network-offline-install).")
# Shown in the "On the device" tab of a guide that has no `terminal:` of its own.
DEVICE_TERMINAL_FALLBACK = "Or fill the folder from your computer, with the ZIP."
diff --git a/scripts/sitestarlight.py b/scripts/sitestarlight.py
index 5623c57b..c6c3b6f3 100644
--- a/scripts/sitestarlight.py
+++ b/scripts/sitestarlight.py
@@ -319,9 +319,9 @@ OG_DIR = Path(__file__).resolve().parent.parent / "docs_assets" / "og"
def og_image(rel: str, level: str) -> str:
"""The sharing card's address: the page's own when it has one, else
its section's."""
- own = re.fullmatch(r"platforms/([a-z0-9_-]+)\.md", rel)
- if own and own[1] != "index" and (OG_DIR / "platforms" / f"{own[1]}.png").is_file():
- return f"{SITE_URL}assets/og/platforms/{own[1]}.png"
+ own = re.fullmatch(r"(platforms|systems)/([a-z0-9_-]+)\.mdx?", rel)
+ if own and own[2] != "index" and (OG_DIR / own[1] / f"{own[2]}.png").is_file():
+ return f"{SITE_URL}assets/og/{own[1]}/{own[2]}.png"
return f"{SITE_URL}assets/og/{og_section(rel, level)}.png"
diff --git a/tests/test_site_r2_components.py b/tests/test_site_r2_components.py
index 449e2142..0d037a22 100644
--- a/tests/test_site_r2_components.py
+++ b/tests/test_site_r2_components.py
@@ -88,6 +88,8 @@ class TablesStackWhenBuilt(unittest.TestCase):
"reference": {"labels": ["A", "B", "C"], "rows": 5, "action": False, "level": "reference"},
# Four columns do not fit a phone column, on any page (round 3).
"wide": {"labels": ["File", "Region", "Required", "Hash"], "rows": 105, "action": False, "level": "reference"},
+ # A hash never breaks: three columns with one overflow a phone (NetherSX2).
+ "hashes": {"labels": ["File", "Required", "Hash"], "rows": 40, "action": False, "level": "reference"},
}
script = (
f"import {{ stackKind }} from {json.dumps(PLUGIN.as_uri())};"
@@ -101,6 +103,7 @@ class TablesStackWhenBuilt(unittest.TestCase):
self.assertEqual(json.loads(result.stdout), {
"zip-header": "true", "action": "true", "pair": "kv",
"short-start": "true", "long-setup": None, "reference": None, "wide": "true",
+ "hashes": "true",
})
diff --git a/tests/test_site_r2_gate.py b/tests/test_site_r2_gate.py
index a478877e..2ee703a4 100644
--- a/tests/test_site_r2_gate.py
+++ b/tests/test_site_r2_gate.py
@@ -45,6 +45,16 @@ _ELEMENT = re.compile(r"<[a-zA-Z][a-zA-Z0-9-]*[\s/>]")
_TAGS = re.compile(r"<[^>]+>")
_TABLE = re.compile(r"