InferenceNet-Leaderboard / site-shell.js
YICHEN013's picture
Add the InferenceNet project portal with Home, Data and Agent pages
03c1286 verified
Raw History Blame Contribute Delete
1.89 kB
// Shared navigation preferences across the project portal and leaderboard.
export function initSite({ onLanguageChange = () => {} } = {}) {
let language = 'en', theme = 'light';
try {
language = localStorage.getItem('inferencenet-language') === 'zh' ? 'zh' : 'en';
theme = localStorage.getItem('inferencenet-theme') === 'dark' ? 'dark' : 'light';
} catch (_) { /* Storage is optional in embedded browsers. */ }
const languageButton = document.getElementById('language');
const themeButton = document.getElementById('theme');
function render() {
document.documentElement.lang = language === 'zh' ? 'zh-CN' : 'en';
document.documentElement.dataset.theme = theme;
document.querySelectorAll('[data-en][data-zh]').forEach(el => { el.textContent = el.dataset[language]; });
languageButton.textContent = language === 'en' ? '中文' : 'EN';
languageButton.setAttribute('aria-label', language === 'en' ? 'Switch to Chinese' : 'Switch to English');
themeButton.setAttribute('aria-pressed', String(theme === 'dark'));
document.getElementById('theme-label').textContent = language === 'zh' ? (theme === 'light' ? '浅色' : '深色') : (theme === 'light' ? 'Light' : 'Dark');
themeButton.setAttribute('aria-label', language === 'zh' ? `切换到${theme === 'light' ? '深色' : '浅色'}主题` : `Switch to ${theme === 'light' ? 'dark' : 'light'} theme`);
}
languageButton.addEventListener('click', () => {
language = language === 'en' ? 'zh' : 'en';
try { localStorage.setItem('inferencenet-language', language); } catch (_) {}
render();
onLanguageChange(language);
});
themeButton.addEventListener('click', () => {
theme = theme === 'light' ? 'dark' : 'light';
try { localStorage.setItem('inferencenet-theme', theme); } catch (_) {}
render();
});
render();
return { get language() { return language; } };
}