[DOCS] Add state retention to design-tabs (#19179)
This commit is contained in:
Vendored
+78
@@ -0,0 +1,78 @@
|
||||
var sd_labels_by_text = {};
|
||||
var pageHash = getPageHash(window.location.pathname)
|
||||
var languages = ['py', 'cpp', 'c']
|
||||
|
||||
function ready() {
|
||||
const savedState = getTabsState(pageHash)
|
||||
const languageState = getLanguageState()
|
||||
const preselect = []
|
||||
let changeLanguage = false
|
||||
const li = document.getElementsByClassName("sd-tab-label");
|
||||
for (const label of li) {
|
||||
syncId = label.getAttribute("data-sync-id");
|
||||
if (syncId) {
|
||||
label.onclick = onLabelClick;
|
||||
if (!sd_labels_by_text[syncId]) {
|
||||
sd_labels_by_text[syncId] = [];
|
||||
}
|
||||
sd_labels_by_text[syncId].push(label);
|
||||
if (syncId == languageState) changeLanguage = true;
|
||||
if (savedState.includes(syncId) && !preselect.includes(syncId))
|
||||
preselect.push(syncId)
|
||||
}
|
||||
}
|
||||
for (item of preselect) selectItem(item);
|
||||
if (changeLanguage) selectItem(languageState);
|
||||
}
|
||||
|
||||
function onLabelClick() {
|
||||
const syncId = this.getAttribute("data-sync-id");
|
||||
selectItem(syncId)
|
||||
|
||||
const tabsState = getTabsState()
|
||||
saveCurrentTabsState(tabsState)
|
||||
if (languages.includes(syncId))
|
||||
saveLanguageState(syncId)
|
||||
}
|
||||
|
||||
function selectItem(item) {
|
||||
for (label of sd_labels_by_text[item]) {
|
||||
label.previousElementSibling.checked = true;
|
||||
}
|
||||
}
|
||||
|
||||
function getTabsState(currentPageHash) {
|
||||
allPagesState = JSON.parse(window.localStorage.getItem('sphinx-design-tabs-state')) || {}
|
||||
if (currentPageHash)
|
||||
return getCurrentPageTabsState(currentPageHash, allPagesState)
|
||||
return allPagesState
|
||||
}
|
||||
|
||||
function getCurrentPageTabsState(currentPageHash, allPagesState) {
|
||||
return allPagesState[currentPageHash] || []
|
||||
}
|
||||
|
||||
function getLanguageState() {
|
||||
return window.localStorage.getItem('sphinx-design-language-state')
|
||||
}
|
||||
|
||||
function saveCurrentTabsState(tabsState) {
|
||||
const checkedElements = []
|
||||
for (label in sd_labels_by_text) {
|
||||
if(sd_labels_by_text[label][0].previousElementSibling.checked)
|
||||
checkedElements.push(label);
|
||||
}
|
||||
tabsState[pageHash] = checkedElements
|
||||
|
||||
window.localStorage.setItem('sphinx-design-tabs-state', JSON.stringify(tabsState))
|
||||
}
|
||||
|
||||
function saveLanguageState(language) {
|
||||
window.localStorage.setItem('sphinx-design-language-state', language)
|
||||
}
|
||||
|
||||
function getPageHash(labels) {
|
||||
return labels.split('').map(v=>v.charCodeAt(0)).reduce((a,v)=>a+((a<<7)+(a<<3))^v).toString(16);
|
||||
}
|
||||
|
||||
// document.addEventListener("DOMContentLoaded", ready, false);
|
||||
@@ -179,6 +179,10 @@ shutil.copy("../../../docs/home.rst",".")
|
||||
def replace_index_with_redirect(app,exception):
|
||||
shutil.copy("../../../docs/index.html","../_build/index.html")
|
||||
|
||||
def replace_design_tabs_script(app, exception):
|
||||
shutil.copy("../../../docs/_static/design-tabs.js","../_build/_static/design-tabs.js")
|
||||
|
||||
|
||||
def setup(app):
|
||||
logger = logging.getLogger(__name__)
|
||||
app.add_config_value('doxygen_mapping_file',
|
||||
@@ -186,6 +190,7 @@ def setup(app):
|
||||
app.add_config_value('repositories', repositories, rebuild=True)
|
||||
app.connect('autodoc-skip-member', autodoc_skip_member)
|
||||
app.connect('build-finished',replace_index_with_redirect)
|
||||
app.connect('build-finished', replace_design_tabs_script)
|
||||
app.add_js_file('js/custom.js')
|
||||
app.add_js_file('js/graphs.js')
|
||||
app.add_js_file('js/newsletter.js')
|
||||
|
||||
Reference in New Issue
Block a user