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 loadneighborsTable(){
const tableBody=document.getElementById("neighborsTableBody");
try{
const response=await fetch("/neighbors/json");
const data=await response.json();
tableBody.innerHTML="";
if(!data.neighbors_table||data.neighbors_table.length===0){
tableBody.innerHTML="| No data available. |
";
return;
}
data.neighbors_table.forEach((entry,index)=>{
const row=document.createElement("tr");
row.setAttribute("data-index",index);
row.innerHTML=`
${entry.address} |
${entry.interface} |
${entry.link_layer_address} |
${entry.state} |
`;
tableBody.appendChild(row);
});
}catch(err){
tableBody.innerHTML="| Error retrieving data. |
";
}
}
window.addEventListener("DOMContentLoaded",()=>{
loadneighborsTable();
});
function refreshNeighborsTable(){
const searchInput=document.getElementById("neighborsSearch");
const refreshIcon=document.getElementById("refreshIcon");
const refreshSpinner=document.getElementById("refreshSpinner");
searchInput.value="";
refreshIcon.classList.add("d-none");
refreshSpinner.classList.remove("d-none");
loadneighborsTable().then(()=>{
refreshIcon.classList.remove("d-none");
refreshSpinner.classList.add("d-none");
});
}