Skip to content

Commit b261510

Browse files
committed
add version switcher (cleaner diff this time)
1 parent 8dc3d93 commit b261510

File tree

4 files changed

+155
-3
lines changed

4 files changed

+155
-3
lines changed

docs/_static/switcher.json

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
[
2+
{
3+
"name": "v0.6.3 (latest)",
4+
"version": "latest",
5+
"language": "en"
6+
},
7+
{
8+
"name": "v0.6.2",
9+
"version": "v0.6.2",
10+
"language": "en"
11+
},
12+
{
13+
"name": "v0.6.1",
14+
"version": "v0.6.1",
15+
"language": "en"
16+
},
17+
{
18+
"name": "v0.6.0",
19+
"version": "v0.6.0",
20+
"language": "en"
21+
},
22+
{
23+
"name": "v0.5.2",
24+
"version": "v0.5.2",
25+
"language": "en"
26+
},
27+
{
28+
"name": "v0.5.1",
29+
"version": "v0.5.1",
30+
"language": "en"
31+
},
32+
{
33+
"name": "v0.5.0",
34+
"version": "v0.5.0",
35+
"language": "en"
36+
},
37+
{
38+
"name": "v0.4.3",
39+
"version": "v0.4.3",
40+
"language": "en"
41+
},
42+
{
43+
"name": "v0.4.2",
44+
"version": "v0.4.2",
45+
"language": "en"
46+
},
47+
{
48+
"name": "v0.4.1",
49+
"version": "v0.4.1",
50+
"language": "en"
51+
},
52+
{
53+
"name": "v0.4.0",
54+
"version": "v0.4.0",
55+
"language": "en"
56+
},
57+
{
58+
"name": "v0.3.2",
59+
"version": "v0.3.2",
60+
"language": "en"
61+
},
62+
{
63+
"name": "v0.3.1",
64+
"version": "v0.3.1",
65+
"language": "en"
66+
},
67+
{
68+
"name": "v0.3.0",
69+
"version": "v0.3.0",
70+
"language": "en"
71+
},
72+
{
73+
"name": "v0.2.2",
74+
"version": "v0.2.2",
75+
"language": "en"
76+
},
77+
{
78+
"name": "v0.2.1",
79+
"version": "v0.2.1",
80+
"language": "en"
81+
},
82+
{
83+
"name": "v0.2.0",
84+
"version": "v0.2.0",
85+
"language": "en"
86+
},
87+
{
88+
"name": "v0.1.1",
89+
"version": "v0.1.1",
90+
"language": "en"
91+
},
92+
{
93+
"name": "v0.1.0",
94+
"version": "v0.1.0",
95+
"language": "en"
96+
}
97+
]

docs/conf.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@
2323

2424
import pydata_sphinx_theme
2525

26-
version = pydata_sphinx_theme.__version__.replace("dev0", "")
26+
release = pydata_sphinx_theme.__version__
27+
version = release.replace("dev0", "")
2728

2829
# -- General configuration ---------------------------------------------------
2930

@@ -81,7 +82,7 @@
8182
# "navbar_align": "left", # [left, content, right] For testing that the navbar items align properly
8283
# "navbar_start": ["navbar-logo", "navbar-version"],
8384
# "navbar_center": ["navbar-nav", "navbar-version"], # Just for testing
84-
# "navbar_end": ["navbar-icon-links", "navbar-version"] # Just for testing
85+
"navbar_end": ["switcher", "navbar-icon-links"],
8586
# "footer_items": ["copyright", "sphinx-version", ""]
8687
}
8788

@@ -91,6 +92,8 @@
9192
"github_repo": "pydata-sphinx-theme",
9293
"github_version": "master",
9394
"doc_path": "docs",
95+
"switcher_json_url": "/_static/switcher.json",
96+
"switcher_template_url": "https://pydata-sphinx-theme.readthedocs.io/{language}/{version}/",
9497
}
9598

9699
# Add any paths that contain custom static files (such as style sheets) here,
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<div class="dropdown">
2+
<button type="button" class="btn btn-primary btn-sm navbar-btn dropdown-toggle" id="switcher_button" data-toggle="dropdown">
3+
{{ switcher_prefix }}{{ release }}
4+
<span class="caret"></span>
5+
</button>
6+
<div id="switcher" class="dropdown-menu list-group-flush py-0" aria-labelledby="switcher_button">
7+
<!-- dropdown will be populated by javascript on page load -->
8+
</div>
9+
</div>
10+
11+
<script type="text/javascript">
12+
// Function to construct the target URL from the JSON components
13+
function buildURL(template, entry) {
14+
//
15+
var parts = template.split(/[\{\}]/);
16+
version_ix = parts.indexOf("version");
17+
language_ix = parts.indexOf("language");
18+
if (version_ix >= 0) {
19+
parts[version_ix] = entry.version;
20+
}
21+
if (language_ix >= 0) {
22+
parts[language_ix] = entry.language;
23+
}
24+
return parts.join("");
25+
}
26+
// Function to populate the (release, language) version switcher
27+
(function () {
28+
// get JSON config
29+
$.getJSON("{{ switcher_json_url }}", function(data, textStatus, jqXHR) {
30+
// create the nodes first (before AJAX calls) to ensure the order is
31+
// correct (for now, links will go to doc version homepage)
32+
$.each(data, function(index, entry) {
33+
entry.url = buildURL("{{ switcher_template_url }}", entry);
34+
$("#switcher").append(`<a class="list-group-item list-group-item-action py-1" href="${entry.url}">${entry.name}</a>`);
35+
});
36+
// see if the current page exists in the other versions of the docs
37+
$.each(data, function(index, entry) {
38+
let filePath = "{{ pagename }}.html";
39+
$.ajax({
40+
type: 'HEAD',
41+
url: `${entry.url}${filePath}`,
42+
// update the target URL if it exists
43+
success: function() {
44+
$("#switcher").children()[index].setAttribute("href", `${entry.url}${filePath}`);
45+
}
46+
});
47+
});
48+
});
49+
})();
50+
</script>

pydata_sphinx_theme/theme.conf

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,6 @@ navbar_start = navbar-logo.html
2929
navbar_center = navbar-nav.html
3030
navbar_end = navbar-icon-links.html
3131
footer_items = copyright.html, sphinx-version.html
32-
page_sidebar_items = page-toc.html, edit-this-page.html
32+
page_sidebar_items = page-toc.html, edit-this-page.html
33+
switcher_json_url =
34+
switcher_template_url =

0 commit comments

Comments
 (0)