1
1
'use strict' ;
2
2
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
+
3
16
// Parses versions in URL segments like:
4
17
const _VERSION_PATTERN = (
5
18
'((?:'
@@ -77,20 +90,15 @@ const _navigate_to_first_existing = (urls) => {
77
90
const _on_version_switch = ( ) => {
78
91
const selected_version = this . options [ this . selectedIndex ] . value + '/' ;
79
92
const url = window . location . href ;
80
- const current_language = language_segment_from_url ( ) ;
81
- const current_version = version_segment_from_url ( ) ;
82
93
const new_url = url . replace (
83
- '/' + current_language + current_version ,
84
- '/' + current_language + selected_version ,
94
+ _CURRENT_PREFIX ,
95
+ '/' + _CURRENT_LANGUAGE + selected_version ,
85
96
) ;
86
97
if ( new_url !== url ) {
87
98
_navigate_to_first_existing ( [
88
99
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 ,
94
102
'/' + selected_version ,
95
103
'/' ,
96
104
] ) ;
@@ -100,14 +108,12 @@ const _on_version_switch = () => {
100
108
const _on_language_switch = ( ) => {
101
109
let selected_language = this . options [ this . selectedIndex ] . value + '/' ;
102
110
const url = window . location . href ;
103
- const current_language = language_segment_from_url ( ) ;
104
- const current_version = version_segment_from_url ( ) ;
105
111
if ( selected_language === 'en/' )
106
112
// Special 'default' case for English.
107
113
selected_language = '' ;
108
114
let new_url = url . replace (
109
- '/' + current_language + current_version ,
110
- '/' + selected_language + current_version ,
115
+ _CURRENT_PREFIX ,
116
+ '/' + selected_language + _CURRENT_VERSION ,
111
117
) ;
112
118
if ( new_url !== url ) {
113
119
_navigate_to_first_existing ( [ new_url , '/' ] ) ;
@@ -135,10 +141,7 @@ function version_segment_from_url() {
135
141
return '' ;
136
142
}
137
143
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 ) ;
142
145
document
143
146
. querySelectorAll ( '.version_switcher_placeholder' )
144
147
. forEach ( ( placeholder ) => {
@@ -147,7 +150,7 @@ const _initialise_switchers = () => {
147
150
placeholder . append ( s ) ;
148
151
} ) ;
149
152
150
- const language_select = _create_language_select ( current_language ) ;
153
+ const language_select = _create_language_select ( _CURRENT_LANGUAGE ) ;
151
154
document
152
155
. querySelectorAll ( '.language_switcher_placeholder' )
153
156
. forEach ( ( placeholder ) => {
0 commit comments