You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
225 lines
6.6 KiB
225 lines
6.6 KiB
const themeFlyoutDisplay = "hidden";
|
|
const themeVersionSelector = "True";
|
|
const themeLanguageSelector = "True";
|
|
|
|
if (themeFlyoutDisplay === "attached") {
|
|
function renderLanguages(config) {
|
|
if (!config.projects.translations.length) {
|
|
return "";
|
|
}
|
|
|
|
const languagesHTML = `
|
|
<dl>
|
|
<dt>Languages</dt>
|
|
${config.projects.translations
|
|
.map(
|
|
(translation) => `
|
|
<dd ${translation.slug == config.projects.current.slug ? 'class="rtd-current-item"' : ""}>
|
|
<a href="${translation.urls.documentation}">${translation.language.code}</a>
|
|
</dd>
|
|
`,
|
|
)
|
|
.join("\n")}
|
|
</dl>
|
|
`;
|
|
return languagesHTML;
|
|
}
|
|
|
|
function renderVersions(config) {
|
|
if (!config.versions.active.length) {
|
|
return "";
|
|
}
|
|
const versionsHTML = `
|
|
<dl>
|
|
<dt>Versions</dt>
|
|
${config.versions.active
|
|
.map(
|
|
(version) => `
|
|
<dd ${version.slug === config.versions.current.slug ? 'class="rtd-current-item"' : ""}>
|
|
<a href="${version.urls.documentation}">${version.slug}</a>
|
|
</dd>
|
|
`,
|
|
)
|
|
.join("\n")}
|
|
</dl>
|
|
`;
|
|
return versionsHTML;
|
|
}
|
|
|
|
function renderDownloads(config) {
|
|
if (!Object.keys(config.versions.current.downloads).length) {
|
|
return "";
|
|
}
|
|
const downloadsNameDisplay = {
|
|
pdf: "PDF",
|
|
epub: "Epub",
|
|
htmlzip: "HTML",
|
|
};
|
|
|
|
const downloadsHTML = `
|
|
<dl>
|
|
<dt>Downloads</dt>
|
|
${Object.entries(config.versions.current.downloads)
|
|
.map(
|
|
([name, url]) => `
|
|
<dd>
|
|
<a href="${url}">${downloadsNameDisplay[name]}</a>
|
|
</dd>
|
|
`,
|
|
)
|
|
.join("\n")}
|
|
</dl>
|
|
`;
|
|
return downloadsHTML;
|
|
}
|
|
|
|
document.addEventListener("readthedocs-addons-data-ready", function (event) {
|
|
const config = event.detail.data();
|
|
|
|
const flyout = `
|
|
<div class="rst-versions" data-toggle="rst-versions" role="note">
|
|
<span class="rst-current-version" data-toggle="rst-current-version">
|
|
<span class="fa fa-book"> Read the Docs</span>
|
|
v: ${config.versions.current.slug}
|
|
<span class="fa fa-caret-down"></span>
|
|
</span>
|
|
<div class="rst-other-versions">
|
|
<div class="injected">
|
|
${renderLanguages(config)}
|
|
${renderVersions(config)}
|
|
${renderDownloads(config)}
|
|
<dl>
|
|
<dt>On Read the Docs</dt>
|
|
<dd>
|
|
<a href="${config.projects.current.urls.home}">Project Home</a>
|
|
</dd>
|
|
<dd>
|
|
<a href="${config.projects.current.urls.builds}">Builds</a>
|
|
</dd>
|
|
<dd>
|
|
<a href="${config.projects.current.urls.downloads}">Downloads</a>
|
|
</dd>
|
|
</dl>
|
|
<dl>
|
|
<dt>Search</dt>
|
|
<dd>
|
|
<form id="flyout-search-form">
|
|
<input
|
|
class="wy-form"
|
|
type="text"
|
|
name="q"
|
|
aria-label="Search docs"
|
|
placeholder="Search docs"
|
|
/>
|
|
</form>
|
|
</dd>
|
|
</dl>
|
|
<hr />
|
|
<small>
|
|
<span>Hosted by <a href="https://about.readthedocs.org/?utm_source=&utm_content=flyout">Read the Docs</a></span>
|
|
</small>
|
|
</div>
|
|
</div>
|
|
`;
|
|
|
|
// Inject the generated flyout into the body HTML element.
|
|
document.body.insertAdjacentHTML("beforeend", flyout);
|
|
|
|
// Trigger the Read the Docs Addons Search modal when clicking on the "Search docs" input from inside the flyout.
|
|
document
|
|
.querySelector("#flyout-search-form")
|
|
.addEventListener("focusin", () => {
|
|
const event = new CustomEvent("readthedocs-search-show");
|
|
document.dispatchEvent(event);
|
|
});
|
|
})
|
|
}
|
|
|
|
if (themeLanguageSelector || themeVersionSelector) {
|
|
function onSelectorSwitch(event) {
|
|
const option = event.target.selectedIndex;
|
|
const item = event.target.options[option];
|
|
window.location.href = item.dataset.url;
|
|
}
|
|
|
|
document.addEventListener("readthedocs-addons-data-ready", function (event) {
|
|
const config = event.detail.data();
|
|
|
|
const versionSwitch = document.querySelector(
|
|
"div.switch-menus > div.version-switch",
|
|
);
|
|
if (themeVersionSelector) {
|
|
let versions = config.versions.active;
|
|
if (config.versions.current.hidden || config.versions.current.type === "external") {
|
|
versions.unshift(config.versions.current);
|
|
}
|
|
const versionSelect = `
|
|
<select>
|
|
${versions
|
|
.map(
|
|
(version) => `
|
|
<option
|
|
value="${version.slug}"
|
|
${config.versions.current.slug === version.slug ? 'selected="selected"' : ""}
|
|
data-url="${version.urls.documentation}">
|
|
${version.slug}
|
|
</option>`,
|
|
)
|
|
.join("\n")}
|
|
</select>
|
|
`;
|
|
|
|
versionSwitch.innerHTML = versionSelect;
|
|
versionSwitch.firstElementChild.addEventListener("change", onSelectorSwitch);
|
|
}
|
|
|
|
const languageSwitch = document.querySelector(
|
|
"div.switch-menus > div.language-switch",
|
|
);
|
|
|
|
if (themeLanguageSelector) {
|
|
if (config.projects.translations.length) {
|
|
// Add the current language to the options on the selector
|
|
let languages = config.projects.translations.concat(
|
|
config.projects.current,
|
|
);
|
|
languages = languages.sort((a, b) =>
|
|
a.language.name.localeCompare(b.language.name),
|
|
);
|
|
|
|
const languageSelect = `
|
|
<select>
|
|
${languages
|
|
.map(
|
|
(language) => `
|
|
<option
|
|
value="${language.language.code}"
|
|
${config.projects.current.slug === language.slug ? 'selected="selected"' : ""}
|
|
data-url="${language.urls.documentation}">
|
|
${language.language.name}
|
|
</option>`,
|
|
)
|
|
.join("\n")}
|
|
</select>
|
|
`;
|
|
|
|
languageSwitch.innerHTML = languageSelect;
|
|
languageSwitch.firstElementChild.addEventListener("change", onSelectorSwitch);
|
|
}
|
|
else {
|
|
languageSwitch.remove();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
document.addEventListener("readthedocs-addons-data-ready", function (event) {
|
|
// Trigger the Read the Docs Addons Search modal when clicking on "Search docs" input from the topnav.
|
|
document
|
|
.querySelector("[role='search'] input")
|
|
.addEventListener("focusin", () => {
|
|
const event = new CustomEvent("readthedocs-search-show");
|
|
document.dispatchEvent(event);
|
|
});
|
|
});
|