diff --git a/website/build.py b/website/build.py index d7ed42c8..f8d79d4a 100644 --- a/website/build.py +++ b/website/build.py @@ -315,6 +315,15 @@ def build(repo_root: Path) -> None: entries = sort_entries(entries) category_urls = {cat["name"]: category_path(cat) for cat in categories} + filter_urls: dict[str, str] = {} + for cat in categories: + filter_urls[cat["name"]] = category_path(cat) + for group in parsed_groups: + filter_urls[group["name"]] = f"/categories/{group['slug']}/" + for entry in entries: + for sub in entry.get("subcategories", []): + filter_urls[sub["value"]] = sub["url"] + env = Environment( loader=FileSystemLoader(website / "templates"), autoescape=True, @@ -339,6 +348,7 @@ def build(repo_root: Path) -> None: build_date=build_date.strftime("%B %d, %Y"), sponsors=sponsors, category_urls=category_urls, + filter_urls_json=json.dumps(filter_urls, sort_keys=True), ), encoding="utf-8", ) diff --git a/website/templates/index.html b/website/templates/index.html index cb3e2fa2..b3f9c6e2 100644 --- a/website/templates/index.html +++ b/website/templates/index.html @@ -113,6 +113,7 @@ {% endif %} +
diff --git a/website/tests/test_build.py b/website/tests/test_build.py index 0ebeb585..9ea2b617 100644 --- a/website/tests/test_build.py +++ b/website/tests/test_build.py @@ -615,6 +615,46 @@ class TestBuild: parent = (site / "categories" / "web-frameworks" / "index.html").read_text(encoding="utf-8") assert "category-breadcrumb" not in parent + def test_index_embeds_filter_urls_json(self, tmp_path): + readme = textwrap.dedent("""\ + # T + + --- + + **AI & ML** + + ## Deep Learning + + - [dl1](https://example.com/dl1) - DL. + + ## Machine Learning + + - Classical + + - [ml1](https://example.com/ml1) - ML. + + # 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" + index_html = (site / "index.html").read_text(encoding="utf-8") + + marker = '", start) + data = json.loads(index_html[start:end]) + + assert data["Deep Learning"] == "/categories/deep-learning/" + assert data["Machine Learning"] == "/categories/machine-learning/" + assert data["AI & ML"] == "/categories/ai-ml/" + assert data["Machine Learning > Classical"] == "/categories/machine-learning/classical/" + def test_build_creates_group_pages(self, tmp_path): readme = textwrap.dedent("""\ # T