feat(website): generate static pages for groups under /categories/

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Vinta Chen
2026-05-03 00:19:14 +08:00
parent cee1e65fb3
commit 532d93d436
2 changed files with 66 additions and 0 deletions

View File

@@ -92,6 +92,10 @@ def category_public_url(category: ParsedSection) -> str:
return f"{SITE_URL}categories/{category['slug']}/"
def group_public_url(group_slug: str) -> str:
return f"{SITE_URL}categories/{group_slug}/"
def subcategory_path(category_slug: str, subcategory_slug: str) -> str:
return f"/categories/{category_slug}/{subcategory_slug}/"
@@ -351,6 +355,28 @@ def build(repo_root: Path) -> None:
category_url=category_public_url(category),
entries=category_entries,
total_categories=len(categories),
page_kind="category",
),
encoding="utf-8",
)
for group in parsed_groups:
group_entries = [entry for entry in entries if group["name"] in entry["groups"]]
page_dir = categories_dir / group["slug"]
page_dir.mkdir(parents=True, exist_ok=True)
synthetic = {
"name": group["name"],
"slug": group["slug"],
"description": "",
"description_html": "",
}
(page_dir / "index.html").write_text(
tpl_category.render(
category=synthetic,
category_url=group_public_url(group["slug"]),
entries=group_entries,
total_categories=len(categories),
page_kind="group",
),
encoding="utf-8",
)

View File

@@ -542,6 +542,46 @@ class TestBuild:
assert 'id="hero-category-heading">Browse by category</h2>' in html
assert 'class="hero-category-link" href="/categories/ai-and-agents/"' in html
def test_build_creates_group_pages(self, tmp_path):
readme = textwrap.dedent("""\
# T
---
**AI & ML**
## Deep Learning
- [dl1](https://example.com/dl1) - DL.
## Machine Learning
- [ml1](https://example.com/ml1) - ML.
**Web Development**
## Web Frameworks
- [wf1](https://example.com/wf1) - WF.
# Contributing
Done.
""")
self._copy_real_templates(tmp_path)
(tmp_path / "README.md").write_text(readme, encoding="utf-8")
build(tmp_path)
site = tmp_path / "website" / "output"
ai_ml = (site / "categories" / "ai-ml" / "index.html").read_text(encoding="utf-8")
web_dev = (site / "categories" / "web-development" / "index.html").read_text(encoding="utf-8")
assert "dl1" in ai_ml
assert "ml1" in ai_ml
assert "wf1" not in ai_ml
assert "wf1" in web_dev
assert "dl1" not in web_dev
# ---------------------------------------------------------------------------
# extract_github_repo