Skip to content

Commit ce8b474

Browse files
committed
Remove anonymous function (IIFE)
1 parent 8a71e42 commit ce8b474

File tree

1 file changed

+141
-143
lines changed

1 file changed

+141
-143
lines changed

templates/switchers.js

Lines changed: 141 additions & 143 deletions
Original file line numberDiff line numberDiff line change
@@ -1,155 +1,153 @@
1-
(function() {
2-
'use strict';
3-
4-
// Parses versions in URL segments like:
5-
// "3", "dev", "release/2.7" or "3.6rc2"
6-
const version_regexs = [
7-
'(?:\\d)',
8-
'(?:\\d\\.\\d[\\w\\d\\.]*)',
9-
'(?:dev)',
10-
'(?:release/\\d.\\d[\\x\\d\\.]*)'];
11-
12-
const all_versions = $VERSIONS;
13-
const all_languages = $LANGUAGES;
14-
15-
function quote_attr(str) {
16-
return '"' + str.replace('"', '\\"') + '"';
17-
}
1+
'use strict';
2+
3+
// Parses versions in URL segments like:
4+
// "3", "dev", "release/2.7" or "3.6rc2"
5+
const version_regexs = [
6+
'(?:\\d)',
7+
'(?:\\d\\.\\d[\\w\\d\\.]*)',
8+
'(?:dev)',
9+
'(?:release/\\d.\\d[\\x\\d\\.]*)'];
10+
11+
const all_versions = $VERSIONS;
12+
const all_languages = $LANGUAGES;
13+
14+
function quote_attr(str) {
15+
return '"' + str.replace('"', '\\"') + '"';
16+
}
17+
18+
function build_version_select(release) {
19+
let buf = ['<select id="version_select">'];
20+
const major_minor = release.split(".").slice(0, 2).join(".");
21+
22+
Object.entries(all_versions).forEach(function([version, title]) {
23+
if (version === major_minor) {
24+
buf.push('<option value=' + quote_attr(version) + ' selected="selected">' + release + '</option>');
25+
} else {
26+
buf.push('<option value=' + quote_attr(version) + '>' + title + '</option>');
27+
}
28+
});
1829

19-
function build_version_select(release) {
20-
let buf = ['<select id="version_select" aria-label="Python version">'];
21-
const major_minor = release.split(".").slice(0, 2).join(".");
30+
buf.push('</select>');
31+
return buf.join('');
32+
}
2233

23-
Object.entries(all_versions).forEach(function([version, title]) {
24-
if (version === major_minor) {
25-
buf.push('<option value=' + quote_attr(version) + ' selected="selected">' + release + '</option>');
26-
} else {
27-
buf.push('<option value=' + quote_attr(version) + '>' + title + '</option>');
28-
}
29-
});
34+
function build_language_select(current_language) {
35+
let buf = ['<select id="language_select">'];
3036

31-
buf.push('</select>');
32-
return buf.join('');
37+
Object.entries(all_languages).forEach(function([language, title]) {
38+
if (language === current_language) {
39+
buf.push('<option value="' + language + '" selected="selected">' + title + '</option>');
40+
} else {
41+
buf.push('<option value="' + language + '">' + title + '</option>');
42+
}
43+
});
44+
if (!(current_language in all_languages)) {
45+
// In case we're browsing a language that is not yet in all_languages.
46+
buf.push('<option value="' + current_language + '" selected="selected">' +
47+
current_language + '</option>');
48+
all_languages[current_language] = current_language;
3349
}
34-
35-
function build_language_select(current_language) {
36-
let buf = ['<select id="language_select" aria-label="Language">'];
37-
38-
Object.entries(all_languages).forEach(function([language, title]) {
39-
if (language === current_language) {
40-
buf.push('<option value="' + language + '" selected="selected">' + title + '</option>');
50+
buf.push('</select>');
51+
return buf.join('');
52+
}
53+
54+
function navigate_to_first_existing(urls) {
55+
// Navigate to the first existing URL in urls.
56+
const url = urls.shift();
57+
if (urls.length === 0 || url.startsWith("file:///")) {
58+
window.location.href = url;
59+
return;
60+
}
61+
fetch(url)
62+
.then(function(response) {
63+
if (response.ok) {
64+
window.location.href = url;
4165
} else {
42-
buf.push('<option value="' + language + '">' + title + '</option>');
66+
navigate_to_first_existing(urls);
4367
}
68+
})
69+
.catch(function(error) {
70+
navigate_to_first_existing(urls);
4471
});
45-
if (!(current_language in all_languages)) {
46-
// In case we're browsing a language that is not yet in all_languages.
47-
buf.push('<option value="' + current_language + '" selected="selected">' +
48-
current_language + '</option>');
49-
all_languages[current_language] = current_language;
50-
}
51-
buf.push('</select>');
52-
return buf.join('');
53-
}
54-
55-
function navigate_to_first_existing(urls) {
56-
// Navigate to the first existing URL in urls.
57-
const url = urls.shift();
58-
if (urls.length === 0 || url.startsWith("file:///")) {
59-
window.location.href = url;
60-
return;
61-
}
62-
fetch(url)
63-
.then(function(response) {
64-
if (response.ok) {
65-
window.location.href = url;
66-
} else {
67-
navigate_to_first_existing(urls);
68-
}
69-
})
70-
.catch(function(error) {
71-
navigate_to_first_existing(urls);
72-
});
73-
}
74-
75-
function on_version_switch() {
76-
const selected_version = this.options[this.selectedIndex].value + '/';
77-
const url = window.location.href;
78-
const current_language = language_segment_from_url();
79-
const current_version = version_segment_from_url();
80-
const new_url = url.replace('/' + current_language + current_version,
81-
'/' + current_language + selected_version);
82-
if (new_url !== url) {
83-
navigate_to_first_existing([
84-
new_url,
85-
url.replace('/' + current_language + current_version,
86-
'/' + selected_version),
87-
'/' + current_language + selected_version,
88-
'/' + selected_version,
89-
'/'
90-
]);
91-
}
92-
}
93-
94-
function on_language_switch() {
95-
let selected_language = this.options[this.selectedIndex].value + '/';
96-
const url = window.location.href;
97-
const current_language = language_segment_from_url();
98-
const current_version = version_segment_from_url();
99-
if (selected_language === 'en/') // Special 'default' case for English.
100-
selected_language = '';
101-
let new_url = url.replace('/' + current_language + current_version,
102-
'/' + selected_language + current_version);
103-
if (new_url !== url) {
104-
navigate_to_first_existing([
105-
new_url,
106-
'/'
107-
]);
108-
}
109-
}
110-
111-
// Returns the path segment of the language as a string, like 'fr/'
112-
// or '' if not found.
113-
function language_segment_from_url() {
114-
const path = window.location.pathname;
115-
const language_regexp = '/((?:' + Object.keys(all_languages).join("|") + ')/)'
116-
const match = path.match(language_regexp);
117-
if (match !== null)
118-
return match[1];
119-
return '';
72+
}
73+
74+
function on_version_switch() {
75+
const selected_version = this.options[this.selectedIndex].value + '/';
76+
const url = window.location.href;
77+
const current_language = language_segment_from_url();
78+
const current_version = version_segment_from_url();
79+
const new_url = url.replace('/' + current_language + current_version,
80+
'/' + current_language + selected_version);
81+
if (new_url !== url) {
82+
navigate_to_first_existing([
83+
new_url,
84+
url.replace('/' + current_language + current_version,
85+
'/' + selected_version),
86+
'/' + current_language + selected_version,
87+
'/' + selected_version,
88+
'/'
89+
]);
12090
}
121-
122-
// Returns the path segment of the version as a string, like '3.6/'
123-
// or '' if not found.
124-
function version_segment_from_url() {
125-
const path = window.location.pathname;
126-
const language_segment = language_segment_from_url();
127-
const version_segment = '(?:(?:' + version_regexs.join('|') + ')/)';
128-
const version_regexp = language_segment + '(' + version_segment + ')';
129-
const match = path.match(version_regexp);
130-
if (match !== null)
131-
return match[1];
132-
return ''
91+
}
92+
93+
function on_language_switch() {
94+
let selected_language = this.options[this.selectedIndex].value + '/';
95+
const url = window.location.href;
96+
const current_language = language_segment_from_url();
97+
const current_version = version_segment_from_url();
98+
if (selected_language === 'en/') // Special 'default' case for English.
99+
selected_language = '';
100+
let new_url = url.replace('/' + current_language + current_version,
101+
'/' + selected_language + current_version);
102+
if (new_url !== url) {
103+
navigate_to_first_existing([
104+
new_url,
105+
'/'
106+
]);
133107
}
108+
}
109+
110+
// Returns the path segment of the language as a string, like 'fr/'
111+
// or '' if not found.
112+
function language_segment_from_url() {
113+
const path = window.location.pathname;
114+
const language_regexp = '/((?:' + Object.keys(all_languages).join("|") + ')/)'
115+
const match = path.match(language_regexp);
116+
if (match !== null)
117+
return match[1];
118+
return '';
119+
}
120+
121+
// Returns the path segment of the version as a string, like '3.6/'
122+
// or '' if not found.
123+
function version_segment_from_url() {
124+
const path = window.location.pathname;
125+
const language_segment = language_segment_from_url();
126+
const version_segment = '(?:(?:' + version_regexs.join('|') + ')/)';
127+
const version_regexp = language_segment + '(' + version_segment + ')';
128+
const match = path.match(version_regexp);
129+
if (match !== null)
130+
return match[1];
131+
return ''
132+
}
133+
134+
document.addEventListener('DOMContentLoaded', function() {
135+
const language_segment = language_segment_from_url();
136+
const current_language = language_segment.replace(/\/+$/g, '') || 'en';
137+
138+
const version_select = build_version_select(DOCUMENTATION_OPTIONS.VERSION);
139+
document.querySelectorAll('.version_switcher_placeholder').forEach((placeholder) => {
140+
placeholder.innerHTML = version_select;
141+
142+
let selectElement = placeholder.querySelector('select');
143+
selectElement.addEventListener('change', on_version_switch);
144+
});
134145

135-
document.addEventListener('DOMContentLoaded', function() {
136-
const language_segment = language_segment_from_url();
137-
const current_language = language_segment.replace(/\/+$/g, '') || 'en';
138-
139-
const version_select = build_version_select(DOCUMENTATION_OPTIONS.VERSION);
140-
document.querySelectorAll('.version_switcher_placeholder').forEach((placeholder) => {
141-
placeholder.innerHTML = version_select;
142-
143-
let selectElement = placeholder.querySelector('select');
144-
selectElement.addEventListener('change', on_version_switch);
145-
});
146-
147-
const language_select = build_language_select(current_language);
148-
document.querySelectorAll('.language_switcher_placeholder').forEach((placeholder) => {
149-
placeholder.innerHTML = language_select;
146+
const language_select = build_language_select(current_language);
147+
document.querySelectorAll('.language_switcher_placeholder').forEach((placeholder) => {
148+
placeholder.innerHTML = language_select;
150149

151-
let selectElement = placeholder.querySelector('select');
152-
selectElement.addEventListener('change', on_language_switch);
153-
});
150+
let selectElement = placeholder.querySelector('select');
151+
selectElement.addEventListener('change', on_language_switch);
154152
});
155-
})();
153+
});

0 commit comments

Comments
 (0)