Add static/js/pages/arp.js
This commit is contained in:
parent
1ea5ad4551
commit
80afa9347c
1 changed files with 110 additions and 0 deletions
110
static/js/pages/arp.js
Normal file
110
static/js/pages/arp.js
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
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<tr.length;i++){
|
||||
tr[i].style.display="none";
|
||||
const td=tr[i].getElementsByTagName("td");
|
||||
for(let j=0;j<td.length;j++){
|
||||
if(td[j]){
|
||||
const txtValue=td[j].textContent||td[j].innerText;
|
||||
if(txtValue.toUpperCase().indexOf(filter)>-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 loadArpTable(){
|
||||
const tableBody=document.getElementById("arpTableBody");
|
||||
|
||||
try{
|
||||
const response=await fetch("/arp/json");
|
||||
const data=await response.json();
|
||||
|
||||
tableBody.innerHTML="";
|
||||
|
||||
if(!data.arp_table||data.arp_table.length===0){
|
||||
tableBody.innerHTML="<tr><td colspan='4' class='text-center'>Geen data beschikbaar.</td></tr>";
|
||||
return;
|
||||
}
|
||||
|
||||
data.arp_table.forEach((entry,index)=>{
|
||||
const row=document.createElement("tr");
|
||||
row.setAttribute("data-index",index);
|
||||
row.innerHTML=`
|
||||
<td>${entry.address}</td>
|
||||
<td>${entry.interface}</td>
|
||||
<td>${entry.link_layer_address}</td>
|
||||
<td>${entry.state}</td>
|
||||
`;
|
||||
tableBody.appendChild(row);
|
||||
});
|
||||
}catch(err){
|
||||
tableBody.innerHTML="<tr><td colspan='4' class='text-center text-danger'>Fout bij ophalen van data.</td></tr>";
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener("DOMContentLoaded",()=>{
|
||||
loadArpTable();
|
||||
});
|
||||
|
||||
function refreshArpTable(){
|
||||
const searchInput=document.getElementById("arpSearch");
|
||||
const refreshIcon=document.getElementById("refreshIcon");
|
||||
const refreshSpinner=document.getElementById("refreshSpinner");
|
||||
|
||||
searchInput.value="";
|
||||
|
||||
refreshIcon.classList.add("d-none");
|
||||
refreshSpinner.classList.remove("d-none");
|
||||
|
||||
loadArpTable().then(()=>{
|
||||
refreshIcon.classList.remove("d-none");
|
||||
refreshSpinner.classList.add("d-none");
|
||||
});
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue