Replace the single 7034-line app.js with 17 ES module files organized into core/ (state, api, i18n, ui) and features/ (calibration, dashboard, device-discovery, devices, displays, kc-targets, pattern-templates, profiles, streams, tabs, targets, tutorials) with an app.js entry point that registers ~90 onclick globals on window. No bundler needed — FastAPI serves modules directly via <script type="module">. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
51 lines
2.0 KiB
JavaScript
51 lines
2.0 KiB
JavaScript
/**
|
|
* Tab switching — switchTab, initTabs, startAutoRefresh.
|
|
*/
|
|
|
|
import { apiKey, refreshInterval, setRefreshInterval } from '../core/state.js';
|
|
|
|
export function switchTab(name) {
|
|
document.querySelectorAll('.tab-btn').forEach(btn => btn.classList.toggle('active', btn.dataset.tab === name));
|
|
document.querySelectorAll('.tab-panel').forEach(panel => panel.classList.toggle('active', panel.id === `tab-${name}`));
|
|
localStorage.setItem('activeTab', name);
|
|
if (name === 'dashboard') {
|
|
// Use window.* to avoid circular imports with feature modules
|
|
if (typeof window.loadDashboard === 'function') window.loadDashboard();
|
|
if (typeof window.startDashboardWS === 'function') window.startDashboardWS();
|
|
} else {
|
|
if (typeof window.stopDashboardWS === 'function') window.stopDashboardWS();
|
|
if (name === 'streams') {
|
|
if (typeof window.loadPictureSources === 'function') window.loadPictureSources();
|
|
} else if (name === 'targets') {
|
|
if (typeof window.loadTargetsTab === 'function') window.loadTargetsTab();
|
|
} else if (name === 'profiles') {
|
|
if (typeof window.loadProfiles === 'function') window.loadProfiles();
|
|
}
|
|
}
|
|
}
|
|
|
|
export function initTabs() {
|
|
let saved = localStorage.getItem('activeTab');
|
|
// Migrate legacy 'devices' tab to 'targets'
|
|
if (saved === 'devices') saved = 'targets';
|
|
if (!saved || !document.getElementById(`tab-${saved}`)) saved = 'dashboard';
|
|
switchTab(saved);
|
|
}
|
|
|
|
export function startAutoRefresh() {
|
|
if (refreshInterval) {
|
|
clearInterval(refreshInterval);
|
|
}
|
|
|
|
setRefreshInterval(setInterval(() => {
|
|
if (apiKey) {
|
|
const activeTab = localStorage.getItem('activeTab') || 'dashboard';
|
|
if (activeTab === 'targets') {
|
|
if (typeof window.loadTargetsTab === 'function') window.loadTargetsTab();
|
|
} else if (activeTab === 'dashboard') {
|
|
if (typeof window.loadDashboard === 'function') window.loadDashboard();
|
|
}
|
|
}
|
|
}, 2000));
|
|
}
|