// domUtils.js // Basic DOM Helpers export function toggleVisibility(elementId, shouldShow) { const element = document.getElementById(elementId); if (element) { element.style.display = shouldShow ? "block" : "none"; } else { console.error(`Element with id "${elementId}" not found.`); } } export function escapeHTML(str) { return String(str) .replace(/&/g, "&") .replace(//g, ">") .replace(/"/g, """) .replace(/'/g, "'"); } export function toggleAllCheckboxes(masterCheckbox) { const checkboxes = document.querySelectorAll(".file-checkbox"); checkboxes.forEach(chk => { chk.checked = masterCheckbox.checked; }); updateFileActionButtons(); // update buttons based on current selection } export function updateFileActionButtons() { const fileListContainer = document.getElementById("fileList"); const fileCheckboxes = document.querySelectorAll("#fileList .file-checkbox"); const selectedCheckboxes = document.querySelectorAll("#fileList .file-checkbox:checked"); const copyBtn = document.getElementById("copySelectedBtn"); const moveBtn = document.getElementById("moveSelectedBtn"); const deleteBtn = document.getElementById("deleteSelectedBtn"); const zipBtn = document.getElementById("downloadZipBtn"); if (fileCheckboxes.length === 0) { if (copyBtn) copyBtn.style.display = "none"; if (moveBtn) moveBtn.style.display = "none"; if (deleteBtn) deleteBtn.style.display = "none"; if (zipBtn) zipBtn.style.display = "none"; } else { if (copyBtn) copyBtn.style.display = "inline-block"; if (moveBtn) moveBtn.style.display = "inline-block"; if (deleteBtn) deleteBtn.style.display = "inline-block"; if (zipBtn) zipBtn.style.display = "inline-block"; if (selectedCheckboxes.length > 0) { if (copyBtn) copyBtn.disabled = false; if (moveBtn) moveBtn.disabled = false; if (deleteBtn) deleteBtn.disabled = false; if (zipBtn) zipBtn.disabled = false; } else { if (copyBtn) copyBtn.disabled = true; if (moveBtn) moveBtn.disabled = true; if (deleteBtn) deleteBtn.disabled = true; if (zipBtn) zipBtn.disabled = true; } } } export function showToast(message, duration = 3000) { const toast = document.getElementById("customToast"); if (!toast) { console.error("Toast element not found"); return; } toast.textContent = message; toast.style.display = "block"; // Force reflow for transition effect. void toast.offsetWidth; toast.classList.add("show"); setTimeout(() => { toast.classList.remove("show"); setTimeout(() => { toast.style.display = "none"; }, 500); }, duration); } // --- DOM Building Functions for File Table --- export function buildSearchAndPaginationControls({ currentPage, totalPages, searchTerm }) { const safeSearchTerm = escapeHTML(searchTerm); return `
| File Name ${sortOrder.column === "name" ? (sortOrder.ascending ? "▲" : "▼") : ""} | Actions | |
|---|---|---|
| ${safeFileName} |