import { sendRequest } from './networkUtils.js'; import { toggleVisibility, toggleAllCheckboxes, updateFileActionButtons, showToast } from './domUtils.js'; import { loadFileList, initFileActions, editFile, saveFile, displayFilePreview, renameFile } from './fileManager.js'; import { loadFolderTree } from './folderManager.js'; import { initUpload } from './upload.js'; import { initAuth, checkAuthentication } from './auth.js'; function loadCsrfToken() { fetch('token.php', { credentials: 'include' }) .then(response => response.json()) .then(data => { // Set global variables. window.csrfToken = data.csrf_token; window.SHARE_URL = data.share_url; // Update (or create) the CSRF meta tag. let metaCSRF = document.querySelector('meta[name="csrf-token"]'); if (!metaCSRF) { metaCSRF = document.createElement('meta'); metaCSRF.name = 'csrf-token'; document.head.appendChild(metaCSRF); } metaCSRF.setAttribute('content', data.csrf_token); // Update (or create) the share URL meta tag. let metaShare = document.querySelector('meta[name="share-url"]'); if (!metaShare) { metaShare = document.createElement('meta'); metaShare.name = 'share-url'; document.head.appendChild(metaShare); } metaShare.setAttribute('content', data.share_url); }) .catch(error => console.error("Error loading CSRF token and share URL:", error)); } document.addEventListener("DOMContentLoaded", loadCsrfToken); // Expose functions for inline handlers. window.sendRequest = sendRequest; window.toggleVisibility = toggleVisibility; window.toggleAllCheckboxes = toggleAllCheckboxes; window.editFile = editFile; window.saveFile = saveFile; window.renameFile = renameFile; // Global variable for the current folder. window.currentFolder = "root"; document.addEventListener("DOMContentLoaded", function () { // Call initAuth synchronously. initAuth(); // --- Dark Mode Persistence --- // Get the dark mode toggle button. const darkModeToggle = document.getElementById("darkModeToggle"); // Retrieve stored user preference (if any). const storedDarkMode = localStorage.getItem("darkMode"); // Apply stored preference; if none, fall back to OS setting. if (storedDarkMode === "true") { document.body.classList.add("dark-mode"); } else if (storedDarkMode === "false") { document.body.classList.remove("dark-mode"); } else { if (window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches) { document.body.classList.add("dark-mode"); } else { document.body.classList.remove("dark-mode"); } } // Set the initial button label. if (darkModeToggle) { darkModeToggle.textContent = document.body.classList.contains("dark-mode") ? "Light Mode" : "Dark Mode"; // When clicked, toggle dark mode and store preference. darkModeToggle.addEventListener("click", function () { if (document.body.classList.contains("dark-mode")) { document.body.classList.remove("dark-mode"); localStorage.setItem("darkMode", "false"); darkModeToggle.textContent = "Dark Mode"; } else { document.body.classList.add("dark-mode"); localStorage.setItem("darkMode", "true"); darkModeToggle.textContent = "Light Mode"; } }); } // Listen for OS theme changes if no user preference is set. if (localStorage.getItem("darkMode") === null && window.matchMedia) { window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", (event) => { if (event.matches) { document.body.classList.add("dark-mode"); if (darkModeToggle) darkModeToggle.textContent = "Light Mode"; } else { document.body.classList.remove("dark-mode"); if (darkModeToggle) darkModeToggle.textContent = "Dark Mode"; } }); } // --- End Dark Mode Persistence --- const message = sessionStorage.getItem("welcomeMessage"); if (message) { showToast(message); sessionStorage.removeItem("welcomeMessage"); } checkAuthentication().then(authenticated => { if (authenticated) { window.currentFolder = "root"; loadFileList(window.currentFolder); initFileActions(); initUpload(); loadFolderTree(); } else { console.warn("User not authenticated. Data loading deferred."); } }); });