Files
wordpress-theme-aksrt/assets/js/routes/user-home.js
T

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();
}
})();