summaryrefslogtreecommitdiffstats
path: root/docs/extensions
diff options
context:
space:
mode:
authorAndrew Godwin2022-11-27 16:16:01 -0700
committerAndrew Godwin2022-11-27 16:16:01 -0700
commitba36f9b92a4e5ca638f35a9ed5d6c75228de53ec (patch)
tree0b3492ed91c5746430cd083e5ba5a9ec2511febd /docs/extensions
parent348c03e7da2478def83e7d6d9e1f7f1fad265fcd (diff)
downloadtakahe-ba36f9b92a4e5ca638f35a9ed5d6c75228de53ec.tar.gz
takahe-ba36f9b92a4e5ca638f35a9ed5d6c75228de53ec.tar.bz2
takahe-ba36f9b92a4e5ca638f35a9ed5d6c75228de53ec.zip
Fix Sphinx canonical links
Diffstat (limited to 'docs/extensions')
-rw-r--r--docs/extensions/canonical_fix.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/docs/extensions/canonical_fix.py b/docs/extensions/canonical_fix.py
new file mode 100644
index 0000000..509a546
--- /dev/null
+++ b/docs/extensions/canonical_fix.py
@@ -0,0 +1,30 @@
+from sphinx.application import Sphinx
+from sphinx.builders.dirhtml import DirectoryHTMLBuilder
+
+
+def setup(app: Sphinx):
+ app.connect("html-page-context", canonical_url)
+
+
+def canonical_url(app: Sphinx, pagename, templatename, context, doctree):
+ """Sphinx 1.8 builds a canonical URL if ``html_baseurl`` config is
+ set. However, it builds a URL ending with ".html" when using the
+ dirhtml builder, which is incorrect. Detect this and generate the
+ correct URL for each page.
+ Also accepts the custom, deprecated ``canonical_url`` config as the
+ base URL. This will be removed in version 2.1.
+ """
+ base = app.config.html_baseurl
+
+ if (
+ not base
+ or not isinstance(app.builder, DirectoryHTMLBuilder)
+ or not context["pageurl"]
+ or not context["pageurl"].endswith(".html")
+ ):
+ return
+
+ # Fix pageurl for dirhtml builder if this version of Sphinx still
+ # generates .html URLs.
+ target = app.builder.get_target_uri(pagename)
+ context["pageurl"] = base + target