4
4
if ( ! String . prototype . startsWith ) {
5
5
Object . defineProperty ( String . prototype , 'startsWith' , {
6
6
value : function ( search , rawPos ) {
7
- var pos = rawPos > 0 ? rawPos | 0 : 0 ;
7
+ const pos = rawPos > 0 ? rawPos | 0 : 0 ;
8
8
return this . substring ( pos , pos + search . length ) === search ;
9
9
}
10
10
} ) ;
11
11
}
12
12
13
13
// Parses versions in URL segments like:
14
14
// "3", "dev", "release/2.7" or "3.6rc2"
15
- var version_regexs = [
15
+ const version_regexs = [
16
16
'(?:\\d)' ,
17
17
'(?:\\d\\.\\d[\\w\\d\\.]*)' ,
18
18
'(?:dev)' ,
19
19
'(?:release/\\d.\\d[\\x\\d\\.]*)' ] ;
20
20
21
- var all_versions = $VERSIONS ;
22
- var all_languages = $LANGUAGES ;
21
+ const all_versions = $VERSIONS ;
22
+ const all_languages = $LANGUAGES ;
23
23
24
24
function quote_attr ( str ) {
25
25
return '"' + str . replace ( '"' , '\\"' ) + '"' ;
26
26
}
27
27
28
28
function build_version_select ( release ) {
29
- var buf = [ '<select id="version_select">' ] ;
30
- var major_minor = release . split ( "." ) . slice ( 0 , 2 ) . join ( "." ) ;
29
+ let buf = [ '<select id="version_select">' ] ;
30
+ const major_minor = release . split ( "." ) . slice ( 0 , 2 ) . join ( "." ) ;
31
31
32
- $ . each ( all_versions , function ( version , title ) {
33
- if ( version == major_minor )
32
+ Object . entries ( all_versions ) . forEach ( function ( [ version , title ] ) {
33
+ if ( version === major_minor ) {
34
34
buf . push ( '<option value=' + quote_attr ( version ) + ' selected="selected">' + release + '</option>' ) ;
35
- else
35
+ } else {
36
36
buf . push ( '<option value=' + quote_attr ( version ) + '>' + title + '</option>' ) ;
37
+ }
37
38
} ) ;
38
39
39
40
buf . push ( '</select>' ) ;
40
41
return buf . join ( '' ) ;
41
42
}
42
43
43
44
function build_language_select ( current_language ) {
44
- var buf = [ '<select id="language_select">' ] ;
45
+ let buf = [ '<select id="language_select">' ] ;
45
46
46
- $ . each ( all_languages , function ( language , title ) {
47
- if ( language == current_language )
48
- buf . push ( '<option value="' + language + '" selected="selected">' +
49
- all_languages [ current_language ] + '</option>' ) ;
50
- else
47
+ Object . entries ( all_languages ) . forEach ( function ( [ language , title ] ) {
48
+ if ( language === current_language ) {
49
+ buf . push ( '<option value="' + language + '" selected="selected">' + title + '</option>' ) ;
50
+ } else {
51
51
buf . push ( '<option value="' + language + '">' + title + '</option>' ) ;
52
+ }
52
53
} ) ;
53
54
if ( ! ( current_language in all_languages ) ) {
54
55
// In case we're browsing a language that is not yet in all_languages.
<
A3E2
code class="diff-text-cell hunk">
@@ -62,29 +63,31 @@
62
63
63
64
function navigate_to_first_existing ( urls ) {
64
65
// Navigate to the first existing URL in urls.
65
- var url = urls . shift ( ) ;
66
+ const url = urls . shift ( ) ;
66
67
if ( urls . length == 0 || url . startsWith ( "file:///" ) ) {
67
68
window . location . href = url ;
68
69
return ;
69
70
}
70
- $ . ajax ( {
71
- url : url ,
72
- success : function ( ) {
73
- window . location . href = url ;
74
- } ,
75
- error : function ( ) {
71
+ fetch ( url )
72
+ . then ( function ( response ) {
73
+ if ( response . ok ) {
74
+ window . location . href = url ;
75
+ } else {
76
+ navigate_to_first_existing ( urls ) ;
77
+ }
78
+ } )
79
+ . catch ( function ( error ) {
76
80
navigate_to_first_existing ( urls ) ;
77
- }
78
- } ) ;
81
+ } ) ;
79
82
}
80
83
81
84
function on_version_switch ( ) {
82
- var selected_version = $ ( this ) . children ( 'option:selected' ) . attr ( ' value' ) + '/' ;
83
- var url = window . location . href ;
84
- var current_language = language_segment_from_url ( ) ;
85
- var current_version = version_segment_from_url ( ) ;
86
- var new_url = url . replace ( '/' + current_language + current_version ,
87
- '/' + current_language + selected_version ) ;
85
+ const selected_version = this . options [ this . selectedIndex ] . value + '/' ;
86
+ const url = window . location . href ;
87
+ const current_language = language_segment_from_url ( ) ;
88
+ const current_version = version_segment_from_url ( ) ;
89
+ const new_url = url . replace ( '/' + current_language + current_version ,
90
+ '/' + current_language + selected_version ) ;
88
91
if ( new_url != url ) {
89
92
navigate_to_first_existing ( [
90
93
new_url ,
98
101
}
99
102
100
103
function on_language_switch ( ) {
101
- var selected_language = $ ( this ) . children ( 'option:selected' ) . attr ( ' value' ) + '/' ;
102
- var url = window . location . href ;
103
- var current_language = language_segment_from_url ( ) ;
104
- var current_version = version_segment_from_url ( ) ;
105
- if ( selected_language == 'en/' ) // Special 'default' case for english .
104
+ let selected_language = this . options [ this . selectedIndex ] . value + '/' ;
105
+ const url = window . location . href ;
106
+ const current_language = language_segment_from_url ( ) ;
107
+ const current_version = version_segment_from_url ( ) ;
108
+ if ( selected_language == 'en/' ) // Special 'default' case for English .
106
109
selected_language = '' ;
107
- var new_url = url . replace ( '/' + current_language + current_version ,
110
+ let new_url = url . replace ( '/' + current_language + current_version ,
108
111
'/' + selected_language + current_version ) ;
109
112
if ( new_url != url ) {
110
113
navigate_to_first_existing ( [
117
120
// Returns the path segment of the language as a string, like 'fr/'
118
121
// or '' if not found.
119
122
function language_segment_from_url ( ) {
120
- var path = window . location . pathname ;
121
- var language_regexp = '/((?:' + Object . keys ( all_languages ) . join ( "|" ) + ')/)'
122
- var match = path . match ( language_regexp ) ;
123
+ const path = window . location . pathname ;
124
+ const language_regexp = '/((?:' + Object . keys ( all_languages ) . join ( "|" ) + ')/)'
125
+ const match = path . match ( language_regexp ) ;
123
126
if ( match !== null )
124
127
return match [ 1 ] ;
125
128
return '' ;
128
131
// Returns the path segment of the version as a string, like '3.6/'
129
132
// or '' if not found.
130
133
function version_segment_from_url ( ) {
131
- var path = window . location . pathname ;
132
- var language_segment = language_segment_from_url ( ) ;
133
- var version_segment = '(?:(?:' + version_regexs . join ( '|' ) + ')/)' ;
134
- var version_regexp = language_segment + '(' + version_segment + ')' ;
135
- var match = path . match ( version_regexp ) ;
134
+ const path = window . location . pathname ;
135
+ const language_segment = language_segment_from_url ( ) ;
136
+ const version_segment = '(?:(?:' + version_regexs . join ( '|' ) + ')/)' ;
137
+ const version_regexp = language_segment + '(' + version_segment + ')' ;
138
+ const match = path . match ( version_regexp ) ;
136
139
if ( match !== null )
137
140
return match [ 1 ] ;
138
141
return ''
139
142
}
140
143
141
144
function create_placeholders_if_missing ( ) {
142
- var version_segment = version_segment_from_url ( ) ;
143
- var language_segment = language_segment_from_url ( ) ;
144
- var index = "/" + language_segment + version_segment ;
145
+ const version_segment = version_segment_from_url ( ) ;
146
+ const language_segment = language_segment_from_url ( ) ;
147
+ const index = "/" + language_segment + version_segment ;
145
148
146
- if ( $ ( '.version_switcher_placeholder' ) . length )
149
+ if ( document . querySelectorAll ( '.version_switcher_placeholder' ) . length > 0 ) {
147
150
return ;
151
+ }
148
152
149
- var html = '<span class="language_switcher_placeholder"></span> \
153
+ const html = '<span class="language_switcher_placeholder"></span> \
150
154
<span class="version_switcher_placeholder"></span> \
151
155
<a href="/" id="indexlink">Documentation</a> »' ;
152
156
153
- var probable_places = [
157
+ const probable_places = [
154
158
"body>div.related>ul>li:not(.right):contains('Documentation'):first" ,
155
159
"body>div.related>ul>li:not(.right):contains('documentation'):first" ,
156
160
] ;
157
161
158
- for ( var i = 0 ; i < probable_places . length ; i ++ ) {
159
- var probable_place = $ ( probable_places [ i ] ) ;
162
+ for ( let i = 0 ; i < probable_places . length ; i ++ ) {
163
+ let probable_place = $ ( probable_places [ i ] ) ;
160
164
if ( probable_place . length == 1 ) {
161
165
probable_place . html ( html ) ;
162
166
document . getElementById ( 'indexlink' ) . href = index ;
165
169
}
166
170
}
167
171
168
- $ ( document ) . ready ( function ( ) {
169
- var language_segment = language_segment_from_url ( ) ;
170
- var current_language = language_segment . replace ( / \/ + $ / g, '' ) || 'en' ;
171
- var version_select = build_version_select ( DOCUMENTATION_OPTIONS . VERSION ) ;
172
+ document . addEventListener ( 'DOMContentLoaded' , function ( ) {
173
+ const language_segment = language_segment_from_url ( ) ;
174
+ const current_language = language_segment . replace ( / \/ + $ / g, '' ) || 'en' ;
175
+ const version_select = build_version_select ( DOCUMENTATION_OPTIONS . VERSION ) ;
172
176
173
177
create_placeholders_if_missing ( ) ;
174
- $ ( '.version_switcher_placeholder' ) . html ( version_select ) ;
175
- $ ( '.version_switcher_placeholder select' ) . bind ( 'change' , on_version_switch ) ;
176
178
177
- var language_select = build_language_select ( current_language ) ;
179
+ let placeholders = document . querySelectorAll ( '.version_switcher_placeholder' ) ;
180
+ placeholders . forEach ( function ( placeholder ) {
181
+ placeholder . innerHTML = version_select ;
178
182
179
- $ ( '.language_switcher_placeholder' ) . html ( language_select ) ;
180
- $ ( '.language_switcher_placeholder select' ) . bind ( 'change' , on_language_switch ) ;
183
+ let selectElement = placeholder . querySelector ( 'select' ) ;
184
+ selectElement . addEventListener ( 'change' , on_version_switch ) ;
185
+ } ) ;
186
+
187
+ const language_select = build_language_select ( current_language ) ;
188
+
189
+ placeholders = document . querySelectorAll ( '.language_switcher_placeholder' ) ;
190
+ placeholders . forEach ( function ( placeholder ) {
191
+ placeholder . innerHTML = language_select ;
192
+
193
+ let selectElement = placeholder . querySelector ( 'select' ) ;
194
+ selectElement . addEventListener ( 'change' , on_language_switch ) ;
195
+ } ) ;
181
196
} ) ;
182
197
} ) ( ) ;
0 commit comments