71 lines
1.8 KiB
JavaScript
71 lines
1.8 KiB
JavaScript
/**
|
|
* AKSRT User Home — 公开用户主页专属脚本
|
|
*
|
|
* 负责公开主页 Tab 切换和 URL 同步。
|
|
*/
|
|
|
|
(function() {
|
|
'use strict';
|
|
|
|
function initUserHomeTabs() {
|
|
var tabContainer = document.querySelector('.dashboard--public .dashboard-tabs');
|
|
if (!tabContainer) return;
|
|
|
|
var tabs = tabContainer.querySelectorAll('[data-tab]');
|
|
var panels = {};
|
|
var defaultTab = tabs.length ? tabs[0].getAttribute('data-tab') : 'posts';
|
|
|
|
tabs.forEach(function(tab) {
|
|
var name = tab.getAttribute('data-tab');
|
|
var panel = document.getElementById('panel-' + name);
|
|
if (panel) {
|
|
panels[name] = { tab: tab, panel: panel };
|
|
}
|
|
});
|
|
|
|
function switchTo(name) {
|
|
if (!panels[name]) name = defaultTab;
|
|
|
|
Object.keys(panels).forEach(function(key) {
|
|
var active = key === name;
|
|
panels[key].tab.classList.toggle('is-active', active);
|
|
panels[key].tab.setAttribute('aria-selected', active ? 'true' : 'false');
|
|
panels[key].panel.classList.toggle('is-active', active);
|
|
panels[key].panel.hidden = !active;
|
|
});
|
|
}
|
|
|
|
function tabFromUrl() {
|
|
var m = window.location.search.match(/[?&]tab=([^&]+)/);
|
|
return m ? decodeURIComponent(m[1]) : defaultTab;
|
|
}
|
|
|
|
function updateUrl(name) {
|
|
if (!window.history.replaceState) return;
|
|
var u = new URL(window.location);
|
|
if (name === defaultTab) {
|
|
u.searchParams.delete('tab');
|
|
} else {
|
|
u.searchParams.set('tab', name);
|
|
}
|
|
window.history.replaceState({}, '', u);
|
|
}
|
|
|
|
tabs.forEach(function(tab) {
|
|
tab.addEventListener('click', function() {
|
|
var name = this.getAttribute('data-tab');
|
|
switchTo(name);
|
|
updateUrl(name);
|
|
});
|
|
});
|
|
|
|
switchTo(tabFromUrl());
|
|
}
|
|
|
|
if (document.readyState === 'loading') {
|
|
document.addEventListener('DOMContentLoaded', initUserHomeTabs);
|
|
} else {
|
|
initUserHomeTabs();
|
|
}
|
|
})();
|