mirror of
https://github.com/python/cpython.git
synced 2026-04-15 08:11:10 +00:00
58 lines
2 KiB
JavaScript
58 lines
2 KiB
JavaScript
// Tachyon Profiler - Shared JavaScript
|
|
// Common utilities shared between flamegraph and heatmap views
|
|
|
|
// ============================================================================
|
|
// Theme Support
|
|
// ============================================================================
|
|
|
|
// Storage key for theme preference
|
|
const THEME_STORAGE_KEY = 'tachyon-theme';
|
|
|
|
// Get the preferred theme from localStorage or system preference
|
|
function getPreferredTheme() {
|
|
const saved = localStorage.getItem(THEME_STORAGE_KEY);
|
|
if (saved) return saved;
|
|
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
|
}
|
|
|
|
// Apply theme and update UI
|
|
function applyTheme(theme) {
|
|
document.documentElement.setAttribute('data-theme', theme);
|
|
const btn = document.getElementById('theme-btn');
|
|
if (btn) {
|
|
const moonIcon = btn.querySelector('.icon-moon');
|
|
const sunIcon = btn.querySelector('.icon-sun');
|
|
if (moonIcon) moonIcon.style.display = theme === 'dark' ? 'none' : '';
|
|
if (sunIcon) sunIcon.style.display = theme === 'dark' ? '' : 'none';
|
|
}
|
|
}
|
|
|
|
// Toggle theme and save preference. Returns the new theme.
|
|
function toggleAndSaveTheme() {
|
|
const current = document.documentElement.getAttribute('data-theme') || 'light';
|
|
const next = current === 'light' ? 'dark' : 'light';
|
|
applyTheme(next);
|
|
localStorage.setItem(THEME_STORAGE_KEY, next);
|
|
return next;
|
|
}
|
|
|
|
// ============================================================================
|
|
// Toggle Switch UI
|
|
// ============================================================================
|
|
|
|
function updateToggleUI(toggleId, isOn) {
|
|
const toggle = document.getElementById(toggleId);
|
|
if (toggle) {
|
|
const track = toggle.querySelector('.toggle-track');
|
|
const labels = toggle.querySelectorAll('.toggle-label');
|
|
if (isOn) {
|
|
track.classList.add('on');
|
|
labels[0].classList.remove('active');
|
|
labels[1].classList.add('active');
|
|
} else {
|
|
track.classList.remove('on');
|
|
labels[0].classList.add('active');
|
|
labels[1].classList.remove('active');
|
|
}
|
|
}
|
|
}
|