From 80afa9347cfdf137f1dea161bcb09dd43a9617fe Mon Sep 17 00:00:00 2001 From: Blackwhitebear8 Date: Sat, 21 Jun 2025 14:29:28 +0200 Subject: [PATCH] Add static/js/pages/arp.js --- static/js/pages/arp.js | 110 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 static/js/pages/arp.js diff --git a/static/js/pages/arp.js b/static/js/pages/arp.js new file mode 100644 index 0000000..1d3e958 --- /dev/null +++ b/static/js/pages/arp.js @@ -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-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="Geen data beschikbaar."; + return; + } + + data.arp_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="Fout bij ophalen van data."; + } +} + +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"); + }); +}