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