(function() {
const THEME_KEY = 'vb6parse-theme';
const LIGHT_HIGHLIGHT = 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github.min.css';
const DARK_HIGHLIGHT = 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github-dark.min.css';
function getSystemPreference() {
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
return 'dark';
} else if (window.matchMedia && window.matchMedia('(prefers-color-scheme: light)').matches) {
return 'light';
}
return 'dark';
}
function getTheme() {
const savedTheme = localStorage.getItem(THEME_KEY);
if (savedTheme) {
return savedTheme;
}
return getSystemPreference();
}
function saveTheme(theme) {
localStorage.setItem(THEME_KEY, theme);
}
function updateHighlightTheme(theme) {
const highlightLink = document.querySelector('link[href*="highlight.js"]');
if (highlightLink) {
highlightLink.href = theme === 'dark' ? DARK_HIGHLIGHT : LIGHT_HIGHLIGHT;
}
}
function applyTheme(theme) {
if (theme === 'dark') {
document.documentElement.setAttribute('data-theme', 'dark');
const themeIcon = document.querySelector('.theme-icon');
if (themeIcon) {
themeIcon.textContent = '☀️';
}
} else {
document.documentElement.setAttribute('data-theme', 'light');
const themeIcon = document.querySelector('.theme-icon');
if (themeIcon) {
themeIcon.textContent = '🌙';
}
}
updateHighlightTheme(theme);
}
function toggleTheme() {
const currentTheme = getTheme();
const newTheme = currentTheme === 'light' ? 'dark' : 'light';
saveTheme(newTheme);
applyTheme(newTheme);
}
const initialTheme = getTheme();
document.documentElement.setAttribute('data-theme', initialTheme);
if (window.matchMedia) {
const darkModeQuery = window.matchMedia('(prefers-color-scheme: dark)');
darkModeQuery.addEventListener('change', function(e) {
if (!localStorage.getItem(THEME_KEY)) {
const newTheme = e.matches ? 'dark' : 'light';
applyTheme(newTheme);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', function() {
applyTheme(initialTheme);
const toggleButton = document.getElementById('theme-toggle');
if (toggleButton) {
toggleButton.addEventListener('click', toggleTheme);
}
});
} else {
applyTheme(initialTheme);
const toggleButton = document.getElementById('theme-toggle');
if (toggleButton) {
toggleButton.addEventListener('click', toggleTheme);
}
}
updateHighlightTheme(initialTheme);
})();