Skip to content

Commit ab3b079

Browse files
committed
Use constants from DOCUMENTATION_OPTIONS where possible
1 parent 7b5e773 commit ab3b079

File tree

1 file changed

+21
-18
lines changed

1 file changed

+21
-18
lines changed

templates/switchers.js

+21-18
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
'use strict';
22

3+
const _CURRENT_VERSION = DOCUMENTATION_OPTIONS.VERSION;
4+
const _CURRENT_LANGUAGE = DOCUMENTATION_OPTIONS.LANGUAGE?.toLowerCase() || 'en';
5+
const _CURRENT_PREFIX = (() => {
6+
// Sphinx 7.2+ defines the content root data attribute in the HTML element.
7+
const _CONTENT_ROOT = document.documentElement.dataset.content_root;
8+
if (_CONTENT_ROOT !== undefined) {
9+
return new URL(_CONTENT_ROOT, window.location).pathname;
10+
}
11+
// Fallback for older versions of Sphinx (used in Python 3.10 and older).
12+
const _NUM_PREFIX_PARTS = _CURRENT_LANGUAGE === 'en' ? 2 : 3;
13+
return window.location.pathname.split('/', _NUM_PREFIX_PARTS).join('/') + '/';
14+
})();
15+
316
// Parses versions in URL segments like:
417
const _VERSION_PATTERN = (
518
'((?:'
@@ -77,20 +90,15 @@ const _navigate_to_first_existing = (urls) => {
7790
const _on_version_switch = () => {
7891
const selected_version = this.options[this.selectedIndex].value + '/';
7992
const url = window.location.href;
80-
const current_language = language_segment_from_url();
81-
const current_version = version_segment_from_url();
8293
const new_url = url.replace(
83-
'/' + current_language + current_version,
84-
'/' + current_language + selected_version,
94+
_CURRENT_PREFIX,
95+
'/' + _CURRENT_LANGUAGE + selected_version,
8596
);
8697
if (new_url !== url) {
8798
_navigate_to_first_existing([
8899
new_url,
89-
url.replace(
90-
'/' + current_language + current_version,
91-
'/' + selected_version,
92-
),
93-
'/' + current_language + selected_version,
100+
url.replace(_CURRENT_PREFIX, '/' + selected_version),
101+
'/' + _CURRENT_LANGUAGE + selected_version,
94102
'/' + selected_version,
95103
'/',
96104
]);
@@ -100,14 +108,12 @@ const _on_version_switch = () => {
100108
const _on_language_switch = () => {
101109
let selected_language = this.options[this.selectedIndex].value + '/';
102110
const url = window.location.href;
103-
const current_language = language_segment_from_url();
104-
const current_version = version_segment_from_url();
105111
if (selected_language === 'en/')
106112
// Special 'default' case for English.
107113
selected_language = '';
108114
let new_url = url.replace(
109-
'/' + current_language + current_version,
110-
'/' + selected_language + current_version,
115+
_CURRENT_PREFIX,
116+
'/' + selected_language + _CURRENT_VERSION,
111117
);
112118
if (new_url !== url) {
113119
_navigate_to_first_existing([new_url, '/']);
@@ -135,10 +141,7 @@ function version_segment_from_url() {
135141
return '';
136142
}
137143
const _initialise_switchers = () => {
138-
const language_segment = language_segment_from_url();
139-
const current_language = language_segment.replace(/\/+$/g, '') || 'en';
140-
141-
const version_select = _create_version_select(DOCUMENTATION_OPTIONS.VERSION);
144+
const version_select = _create_version_select(_CURRENT_VERSION);
142145
document
143146
.querySelectorAll('.version_switcher_placeholder')
144147
.forEach((placeholder) => {
@@ -147,7 +150,7 @@ const _initialise_switchers = () => {
147150
placeholder.append(s);
148151
});
149152

150-
const language_select = _create_language_select(current_language);
153+
const language_select = _create_language_select(_CURRENT_LANGUAGE);
151154
document
152155
.querySelectorAll('.language_switcher_placeholder')
153156
.forEach((placeholder) => {

0 commit comments

Comments
 (0)