Forge
python4405de34
1"""MkDocs hook: absolute URLs for Material language switcher (GitHub Pages subpath).
2
3mkdocs-static-i18n writes relative alternate links into HTML. On a project site
4(site_url with a path, e.g. /cascade-ide/) an extra ``../`` or a URL without a
5trailing slash can send users to the org root (https://ai-guiders.github.io/).
6Rewrite language-switcher hrefs after each page is rendered.
7"""
8
9from __future__ import annotations
10
11import re
12from urllib.parse import urljoin
13
14from mkdocs.plugins import event_priority
15
16_REL_HREFLANG_RE = re.compile(r'(href=")((?:\.\./)+[^"]+)(" hreflang="[^"]+")')
17
18
19@event_priority(-200)
20def on_post_page(output, page, config, **kwargs):
21 abs_page = getattr(page, "abs_url", None)
22 if not abs_page or not output:
23 return output
24
25 def _abs_href(match: re.Match[str]) -> str:
26 rel = match.group(2)
27 return f"{match.group(1)}{urljoin(abs_page, rel)}{match.group(3)}"
28
29 return _REL_HREFLANG_RE.sub(_abs_href, output)
30
View only · write via MCP/CIDE