function includeHTML() { var z, i, elmnt, file, xhttp; z = document.getElementsByTagName("*"); for (i = 0; i < z.length; i++) { elmnt = z[i]; file = elmnt.getAttribute("include-html"); if (file) { xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4) { if (this.status == 200) {elmnt.innerHTML = this.responseText;} if (this.status == 404) {elmnt.innerHTML = "Page not found.";} elmnt.removeAttribute("include-html"); includeHTML(); } } xhttp.open("GET", file, true); xhttp.send(); return; } } // Process navigation links with BASE_PATH processNavigationLinks(); // Initialize dark mode after content is loaded initDarkMode(); M.AutoInit(); } function processNavigationLinks() { // Get BASE_PATH from config (default to empty if not set) var basePath = (typeof SIMPLEDOC_CONFIG !== 'undefined' && SIMPLEDOC_CONFIG.BASE_PATH) ? SIMPLEDOC_CONFIG.BASE_PATH : ''; // Find all links with data-nav-link attribute var navLinks = document.querySelectorAll('[data-nav-link]'); for (var i = 0; i < navLinks.length; i++) { var link = navLinks[i]; var targetPath = link.getAttribute('data-nav-link'); // Set the href with BASE_PATH prepended link.href = "/" + basePath + targetPath; } } function initDarkMode() { // Check for saved theme preference or default to 'light' var savedTheme = localStorage.getItem('simpledoc-theme'); // If no saved preference, check system preference if (!savedTheme) { if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { savedTheme = 'dark'; } else { savedTheme = 'light'; } } // Apply the theme setTheme(savedTheme); // Update icons to match current theme updateThemeIcons(savedTheme); // Add click listener to desktop toggle button var themeToggle = document.getElementById('theme-toggle'); if (themeToggle) { themeToggle.addEventListener('click', function(e) { e.preventDefault(); toggleTheme(); }); } // Add click listener to mobile toggle button var themeToggleMobile = document.getElementById('theme-toggle-mobile'); if (themeToggleMobile) { themeToggleMobile.addEventListener('click', function(e) { e.preventDefault(); toggleTheme(); }); } // Listen for system theme changes if (window.matchMedia) { window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function(e) { if (!localStorage.getItem('simpledoc-theme')) { setTheme(e.matches ? 'dark' : 'light'); } }); } } function setTheme(theme) { document.documentElement.setAttribute('theme', theme); localStorage.setItem('simpledoc-theme', theme); updateThemeIcons(theme); updatePrismTheme(theme); } function updateThemeIcons(theme) { // Show the opposite icon (what clicking will switch to) var iconName = theme === 'dark' ? 'light_mode' : 'dark_mode'; var themeIcon = document.getElementById('theme-icon'); if (themeIcon) { themeIcon.textContent = iconName; } var themeIconMobile = document.getElementById('theme-icon-mobile'); if (themeIconMobile) { themeIconMobile.textContent = iconName; } } function toggleTheme() { var currentTheme = document.documentElement.getAttribute('theme'); var newTheme = currentTheme === 'dark' ? 'light' : 'dark'; setTheme(newTheme); } function updatePrismTheme(theme) { // Prism Tomorrow theme works well for both light and dark modes // You can customize this if you want different syntax highlighting themes } // Initialize theme on page load (before includeHTML) (function() { var savedTheme = localStorage.getItem('simpledoc-theme'); if (!savedTheme) { if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { savedTheme = 'dark'; } else { savedTheme = 'light'; } } document.documentElement.setAttribute('theme', savedTheme); })();