diff --git a/.github/scripts/generate-redirect.sh b/.github/scripts/generate-redirect.sh
index 4b4d6c0..16f6e43 100755
--- a/.github/scripts/generate-redirect.sh
+++ b/.github/scripts/generate-redirect.sh
@@ -9,11 +9,11 @@ cat > "$OUTPUT" << HTMLEOF
-
+
Redirecting to latest docs
- Redirecting to latest documentation (${LATEST})
+ Redirecting to latest documentation (${LATEST})
HTMLEOF
diff --git a/docs/src/version-selector.js b/docs/src/version-selector.js
index acad34c..3cbeafb 100644
--- a/docs/src/version-selector.js
+++ b/docs/src/version-selector.js
@@ -1,11 +1,17 @@
(function () {
'use strict';
- var pathSegments = window.location.pathname.split('/');
- var currentVersion = pathSegments[1] || '';
- var currentPage = pathSegments.slice(2).join('/');
+ // The script is served from //src/version-selector.js.
+ // Use its URL to derive the site root and current version, so paths work
+ // regardless of whether docs are hosted at the domain root or a subpath.
+ var scriptUrl = document.currentScript.src;
+ var versionBase = new URL('..', scriptUrl).href;
+ var siteRoot = new URL('..', versionBase).href;
+ var currentVersion = versionBase.replace(/\/$/, '').split('/').pop() || '';
+ var pageUrl = window.location.href;
+ var currentPage = pageUrl.startsWith(versionBase) ? pageUrl.substring(versionBase.length) : '';
- fetch('/versions.json')
+ fetch(new URL('versions.json', siteRoot).href)
.then(function (res) {
if (!res.ok) throw new Error(res.status);
return res.json();
@@ -34,7 +40,7 @@
if (select.options.length === 0) return;
select.addEventListener('change', function () {
- window.location.href = '/' + this.value + '/' + currentPage;
+ window.location.href = new URL(this.value + '/' + currentPage, siteRoot).href;
});
var container = document.querySelector('.right-buttons');