-
Notifications
You must be signed in to change notification settings - Fork 12
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
25 changed files
with
500 additions
and
346 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,224 @@ | ||
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); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.