From 4005c2ea8206fa306222ca9fda9f90c12956f047 Mon Sep 17 00:00:00 2001 From: Vinta Chen Date: Sun, 3 May 2026 00:05:02 +0800 Subject: [PATCH] feat(website): add slug and url to subcategory entries Co-Authored-By: Claude --- website/build.py | 10 ++++++++-- website/tests/test_build.py | 30 ++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/website/build.py b/website/build.py index af644bfd..e2040f07 100644 --- a/website/build.py +++ b/website/build.py @@ -11,7 +11,7 @@ from pathlib import Path from typing import Any from jinja2 import Environment, FileSystemLoader -from readme_parser import ParsedGroup, ParsedSection, parse_readme, parse_sponsors +from readme_parser import ParsedGroup, ParsedSection, parse_readme, parse_sponsors, slugify GITHUB_REPO_URL_RE = re.compile(r"^https?://github\.com/([^/]+/[^/]+?)(?:\.git)?/?$") MARKDOWN_LINK_RE = re.compile(r"\[[^\]]+\]\(([^)\s]+)\)") @@ -243,7 +243,13 @@ def extract_entries( if subcat: scoped = f"{cat['name']} > {subcat}" if not any(s["value"] == scoped for s in existing["subcategories"]): - existing["subcategories"].append({"name": subcat, "value": scoped}) + sub_slug = slugify(subcat) + existing["subcategories"].append({ + "name": subcat, + "value": scoped, + "slug": sub_slug, + "url": f"/categories/{cat['slug']}/{sub_slug}/", + }) return entries diff --git a/website/tests/test_build.py b/website/tests/test_build.py index 08321b60..1e52115c 100644 --- a/website/tests/test_build.py +++ b/website/tests/test_build.py @@ -714,6 +714,36 @@ class TestExtractEntries: entries = extract_entries(categories, groups) assert entries[0]["source_type"] == "Built-in" + def test_subcategory_includes_slug_and_url(self): + readme = textwrap.dedent("""\ + # T + + --- + + **Tools** + + ## Web Frameworks + + - Synchronous + + - [django](https://example.com/django) - A framework. + + # Contributing + + Done. + """) + groups = parse_readme(readme) + categories = [c for g in groups for c in g["categories"]] + entries = extract_entries(categories, groups) + assert entries[0]["subcategories"] == [ + { + "name": "Synchronous", + "value": "Web Frameworks > Synchronous", + "slug": "synchronous", + "url": "/categories/web-frameworks/synchronous/", + }, + ] + # --------------------------------------------------------------------------- # annotate_entries_with_stars