Skip to content

Commit bb9fde0

Browse files
authored
fix(docs): add versions (#45)
fix(docs): add versioning
1 parent 78cce1c commit bb9fde0

File tree

3 files changed

+106
-1
lines changed

3 files changed

+106
-1
lines changed

docs/_static/versioning.js

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
const loadVersions = async () => {
2+
const res = await fetch(
3+
DOCUMENTATION_OPTIONS.URL_ROOT + "_static/versions.json",
4+
);
5+
if (res.status !== 200) {
6+
return null;
7+
}
8+
return await res.json();
9+
};
10+
11+
const addVersionWarning = (currentVersion, latestVersion) => {
12+
if (currentVersion === latestVersion) {
13+
return;
14+
}
15+
16+
const header = document.querySelector(".bd-header__inner")?.parentElement;
17+
if (!header) {
18+
return;
19+
}
20+
21+
const container = document.createElement("div");
22+
container.id = "version-warning";
23+
24+
const warningText = document.createElement("span");
25+
warningText.textContent = `You are viewing the documentation for ${
26+
currentVersion === "dev" ||
27+
parseInt(currentVersion) > parseInt(latestVersion)
28+
? "a preview"
29+
: "an outdated"
30+
} version of Litestar.`;
31+
container.appendChild(warningText);
32+
33+
const latestLink = document.createElement("a");
34+
latestLink.textContent = "Click here to go to the latest version";
35+
latestLink.href = DOCUMENTATION_OPTIONS.URL_ROOT + "../latest";
36+
container.appendChild(latestLink);
37+
38+
header.before(container);
39+
};
40+
41+
const formatVersionName = (version, isLatest) =>
42+
version + (isLatest ? " (latest)" : "");
43+
44+
const addVersionSelect = (currentVersion, versionSpec) => {
45+
const navEnd = document.querySelector(".navbar-header-items__end");
46+
47+
if (!navEnd) {
48+
return;
49+
}
50+
51+
const container = document.createElement("div");
52+
container.classList.add("navbar-nav");
53+
54+
const dropdown = document.createElement("div");
55+
dropdown.classList.add("dropdown");
56+
container.appendChild(dropdown);
57+
58+
const dropdownToggle = document.createElement("button");
59+
dropdownToggle.classList.add("btn", "dropdown-toggle", "nav-item");
60+
dropdownToggle.setAttribute("data-bs-toggle", "dropdown");
61+
dropdownToggle.setAttribute("type", "button");
62+
dropdownToggle.textContent = `Version: ${formatVersionName(
63+
currentVersion,
64+
currentVersion === versionSpec.latest,
65+
)}`;
66+
dropdown.appendChild(dropdownToggle);
67+
68+
const dropdownContent = document.createElement("div");
69+
dropdownContent.classList.add("dropdown-menu");
70+
dropdown.appendChild(dropdownContent);
71+
72+
for (const version of versionSpec.versions) {
73+
const navItem = document.createElement("li");
74+
navItem.classList.add("nav-item");
75+
76+
const navLink = document.createElement("a");
77+
navLink.classList.add("nav-link", "nav-internal");
78+
navLink.href = DOCUMENTATION_OPTIONS.URL_ROOT + `../${version}`;
79+
navLink.textContent = formatVersionName(
80+
version,
81+
version === versionSpec.latest,
82+
);
83+
navItem.appendChild(navLink);
84+
85+
dropdownContent.appendChild(navItem);
86+
}
87+
88+
navEnd.prepend(container);
89+
};
90+
91+
const setupVersioning = (versions) => {
92+
if (versions === null) {
93+
return;
94+
}
95+
96+
const currentVersion = DOCUMENTATION_OPTIONS.VERSION;
97+
98+
addVersionWarning(currentVersion, versions.latest);
99+
addVersionSelect(currentVersion, versions);
100+
};
101+
102+
window.addEventListener("DOMContentLoaded", () => {
103+
loadVersions().then(setupVersioning);
104+
});

docs/_static/versions.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{ "versions": ["0", "main"], "latest": "0" }

docs/conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181

8282
# -- Style configuration -----------------------------------------------------
8383
html_theme = "litestar_sphinx_theme"
84-
html_title = "Litestar Framework"
84+
html_title = "Type Lens"
8585
pygments_style = "lightbulb"
8686
todo_include_todos = True
8787

0 commit comments

Comments
 (0)