(function(){ const SEA_API = "https://seaformslibrary.david-ang-sea.workers.dev"; const listEl = document.getElementById("list"); const statusEl = document.getElementById("status"); const searchEl = document.getElementById("search"); const typeFilter = document.getElementById("fileTypeFilter"); const pageSizeEl = document.getElementById("pageSize"); const prevBtn = document.getElementById("prevPage"); const nextBtn = document.getElementById("nextPage"); const pageInfo = document.getElementById("pageInfo"); const downloadSelectedBtn = document.getElementById("btnDownloadSel"); if( !listEl || !statusEl || !searchEl || !typeFilter || !pageSizeEl || !prevBtn || !nextBtn || !pageInfo || !downloadSelectedBtn ){ console.warn("Forms Library: Required HTML elements are missing."); return; } let allFiles = []; let currentPage = 1; let pageSize = Number(pageSizeEl.value) || 10; async function loadFiles(){ try{ statusEl.textContent = "Loading forms..."; const res = await fetch(`${SEA_API}/list`); if(!res.ok){ throw new Error("Failed loading files"); } const data = await res.json(); allFiles = data.files || []; renderList(); statusEl.textContent = allFiles.length ? `${allFiles.length} file(s) loaded` : "No file available."; }catch(err){ console.error(err); statusEl.textContent = "Unable to load forms library."; listEl.innerHTML = ""; } } function renderList(){ const keyword = searchEl.value.toLowerCase().trim(); const selectedType = typeFilter.value; const filtered = allFiles.filter(file => { const name = (file.name || "").toLowerCase(); const matchKeyword = name.includes(keyword); let matchType = true; if(selectedType === "pdf"){ matchType = name.endsWith(".pdf"); } if(selectedType === "doc"){ matchType = name.endsWith(".doc") || name.endsWith(".docx"); } if(selectedType === "xls"){ matchType = name.endsWith(".xls") || name.endsWith(".xlsx"); } if(selectedType === "img"){ matchType = name.endsWith(".jpg") || name.endsWith(".jpeg") || name.endsWith(".png") || name.endsWith(".webp"); } return matchKeyword && matchType; }); const totalPages = Math.max(1, Math.ceil(filtered.length / pageSize)); if(currentPage > totalPages){ currentPage = totalPages; } const start = (currentPage - 1) * pageSize; const paged = filtered.slice(start, start + pageSize); if(!paged.length){ listEl.innerHTML = `