function filterTable(searchInputId,tableId){ const input=document.getElementById(searchInputId); const filter=input.value.toUpperCase(); const table=document.getElementById(tableId); const tr=table.getElementsByTagName("tr"); for(let i=1;i-1){ tr[i].style.display=""; break; } } } } } function sortTable(tableId,columnIndex,th){ const table=document.getElementById(tableId); const tbody=table.tBodies[0]; const rows=Array.from(tbody.rows); const headers=Array.from(th.parentNode.children); headers.forEach(header=>{ if(header!==th){ header.classList.remove('asc','desc'); header.setAttribute('data-sort-state','none'); } }); let currentState=th.getAttribute('data-sort-state')||'none'; let newState=currentState==='none'?'asc':currentState==='asc'?'desc':'none'; th.classList.remove('asc','desc'); if(newState!=='none')th.classList.add(newState); th.setAttribute('data-sort-state',newState); if(newState==='none'){ rows.sort((a,b)=>parseInt(a.getAttribute('data-index'))-parseInt(b.getAttribute('data-index'))); }else{ rows.sort((a,b)=>{ const aText=a.cells[columnIndex].textContent.trim(); const bText=b.cells[columnIndex].textContent.trim(); const aNum=parseFloat(aText.replace(/[^0-9.-]/g,'')); const bNum=parseFloat(bText.replace(/[^0-9.-]/g,'')); const isNumeric=!isNaN(aNum)&&!isNaN(bNum); return newState==='asc' ?(isNumeric?aNum-bNum:aText.localeCompare(bText)) :(isNumeric?bNum-aNum:bText.localeCompare(aText)); }); } rows.forEach(row=>tbody.appendChild(row)); } async function loadInterfaceTable(){ const tableBody=document.getElementById("interfaceTableBody"); const loadingRow=document.getElementById("interface-loading-row"); try{ const response=await fetch("/interfaces/json"); const data=await response.json(); tableBody.innerHTML=""; if(!data.interface_table||data.interface_table.length===0){ tableBody.innerHTML="No data available."; return; } data.interface_table.forEach((entry,index)=>{ const row=document.createElement("tr"); row.setAttribute("data-index",index); row.innerHTML=` ${entry.interface} ${entry.ip_address} ${entry.mac_address} ${entry.vrf} ${entry.mtu} ${entry.status} ${entry.description} `; tableBody.appendChild(row); }); }catch(err){ tableBody.innerHTML="Error retrieving data."; } } window.addEventListener("DOMContentLoaded",()=>{ loadInterfaceTable(); }); function refreshTable(){ const searchInput=document.getElementById("interfaceSearch"); const refreshIcon=document.getElementById("refreshIcon"); const refreshSpinner=document.getElementById("refreshSpinner"); searchInput.value=""; refreshIcon.classList.add("d-none"); refreshSpinner.classList.remove("d-none"); loadInterfaceTable().then(()=>{ refreshIcon.classList.remove("d-none"); refreshSpinner.classList.add("d-none"); }); }