File: versioning.js

package info (click to toggle)
python-advanced-alchemy 1.6.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,424 kB
  • sloc: python: 33,714; makefile: 162; javascript: 123; sh: 4
file content (104 lines) | stat: -rw-r--r-- 3,012 bytes parent folder | download | duplicates (3)
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
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 warningText = document.createElement("span");
  warningText.textContent = `You are viewing the documentation for ${
    currentVersion === "dev" ||
    parseInt(currentVersion) > parseInt(latestVersion)
      ? "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);
});