8000 Construct DOM nodes instead of parsing HTML · python/docsbuild-scripts@84a3f9c · GitHub
[go: up one dir, main page]

Skip to content

Commit 84a3f9c

Browse files
committed
Construct DOM nodes instead of parsing HTML
1 parent cdcd523 commit 84a3f9c

File tree

1 file changed

+48
-42
lines changed

1 file changed

+48
-42
lines changed

templates/switchers.js

Lines changed: 48 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -15,41 +15,45 @@ function quote_attr(str) {
1515
return '"' + str.replace('"', '\\"') + '"';
1616
}
1717

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]) {
18+
const _create_version_select = (release) => {
19+
const major_minor = release.split('.').slice(0, 2).join('.');
20+
const select = document.createElement('select');
21+
select.className = 'version-select';
22+
23+
for (const [version, title] in all_versions) {
24+
const option = document.createElement('option');
25+
option.value = version;
2326
if (version === major_minor) {
24-
buf.push('<option value=' + quote_attr(version) + ' selected="selected">' + release + '</option>');
27+
option.text = release;
28+
option.selected = true;
2529
} else {
26-
buf.push('<option value=' + quote_attr(version) + '>' + title + '</option>');
30+
option.text = title;
2731
}
28-
});
29-
30-
buf.push('</select>');
31-
return buf.join('');
32-
}
32+
select.add(option);
33+
}
3334

34-
function build_language_select(current_language) {
35-
let buf = ['<select id="language_select">'];
35+
return select;
36+
};
3637

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-
});
38+
const _create_language_select = (current_language) => {
4439
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;
40+
// In case we are browsing a language that is not yet in all_languages.
41+
all_languages[current_language] = current_language;
4942
}
50-
buf.push('</select>');
51-
return buf.join('');
52-
}
43+
44+
const select = document.createElement('select');
45+
select.className = 'language-select';
46+
47+
for (const [language, title] in all_languages) {
48+
const option = document.createElement('option');
49+
option.value = language;
50+
option.text = title;
51+
if (language === current_language) option.selected = true;
52+
select.add(option);
53+
}
54+
55+
return select;
56+
};
5357

5458< E864 div class="diff-text-inner">function navigate_to_first_existing(urls) {
5559
// Navigate to the first existing URL in urls.
@@ -134,21 +138,23 @@ const _initialise_switchers = () => {
134138
const language_segment = language_segment_from_url();
135139
const current_language = language_segment.replace(/\/+$/g, '') || 'en';
136140

137-
const version_select = build_version_select(DOCUMENTATION_OPTIONS.VERSION);
138-
document.querySelectorAll('.version_switcher_placeholder').forEach((placeholder) => {
139-
placeholder.innerHTML = version_select;
140-
141-
let selectElement = placeholder.querySelector('select');
142-
selectElement.addEventListener('change', on_version_switch);
143-
});
144-
145-
const language_select = build_language_select(current_language);
146-
document.querySelectorAll('.language_switcher_placeholder').forEach((placeholder) => {
147-
placeholder.innerHTML = language_select;
141+
const version_select = _create_version_select(DOCUMENTATION_OPTIONS.VERSION);
142+
document
143+
.querySelectorAll('.version_switcher_placeholder')
144+
.forEach((placeholder) => {
145+
const s = version_select.cloneNode(true);
146+
s.addEventListener('change', on_version_switch);
147+
placeholder.append(s);
148+
});
148149

149-
let selectElement = placeholder.querySelector('select');
150-
selectElement.addEventListener('change', on_language_switch);
151-
});
150+
const language_select = _create_language_select(current_language);
151+
document
152+
.querySelectorAll('.language_switcher_placeholder')
153+
.forEach((placeholder) => {
154+
const s = language_select.cloneNode(true);
155+
s.addEventListener('change', on_language_switch);
156+
placeholder.append(s);
157+
});
152158
};
153159

154160
if (document.readyState !== 'loading') {

0 commit comments

Comments
 (0)
0