mirror of
https://github.com/myronblair/jarvis
synced 2026-06-30 17:50:23 -05:00
Style count badges to match agents page (cyan, spaced, X ONLINE / Y TOTAL format)
This commit is contained in:
@@ -718,7 +718,7 @@ select.filter-sel:focus{border-color:var(--cyan)}
|
|||||||
|
|
||||||
<!-- NETWORK -->
|
<!-- NETWORK -->
|
||||||
<div class="tab" id="tab-network">
|
<div class="tab" id="tab-network">
|
||||||
<div class="page-title">NETWORK DEVICES <span id="net-title-count" style="font-size:0.6rem;color:var(--dim);letter-spacing:1px;font-weight:400"></span>
|
<div class="page-title">NETWORK DEVICES <span id="net-title-count" style="color:var(--cyan);font-size:0.6rem;letter-spacing:2px"></span>
|
||||||
<div class="actions">
|
<div class="actions">
|
||||||
<button class="btn btn-sm btn-green" onclick="netModal()">+ ADD DEVICE</button>
|
<button class="btn btn-sm btn-green" onclick="netModal()">+ ADD DEVICE</button>
|
||||||
<button class="btn btn-sm btn-yellow" id="scanBtn" onclick="scanNow()">SCAN NOW</button>
|
<button class="btn btn-sm btn-yellow" id="scanBtn" onclick="scanNow()">SCAN NOW</button>
|
||||||
@@ -757,7 +757,7 @@ select.filter-sel:focus{border-color:var(--cyan)}
|
|||||||
|
|
||||||
<!-- KB FACTS -->
|
<!-- KB FACTS -->
|
||||||
<div class="tab" id="tab-facts">
|
<div class="tab" id="tab-facts">
|
||||||
<div class="page-title">KB FACTS <span id="facts-count" style="font-size:0.6rem;color:var(--dim);letter-spacing:1px;font-weight:400"></span>
|
<div class="page-title">KB FACTS <span id="facts-count" style="color:var(--cyan);font-size:0.6rem;letter-spacing:2px"></span>
|
||||||
<div class="actions">
|
<div class="actions">
|
||||||
<button class="btn btn-sm btn-green" onclick="factModal()">+ ADD FACT</button>
|
<button class="btn btn-sm btn-green" onclick="factModal()">+ ADD FACT</button>
|
||||||
<button class="btn btn-sm" onclick="loadFacts()">REFRESH</button>
|
<button class="btn btn-sm" onclick="loadFacts()">REFRESH</button>
|
||||||
@@ -774,7 +774,7 @@ select.filter-sel:focus{border-color:var(--cyan)}
|
|||||||
|
|
||||||
<!-- KB INTENTS -->
|
<!-- KB INTENTS -->
|
||||||
<div class="tab" id="tab-intents">
|
<div class="tab" id="tab-intents">
|
||||||
<div class="page-title">KB INTENTS <span id="intents-count" style="font-size:0.6rem;color:var(--dim);letter-spacing:1px;font-weight:400"></span>
|
<div class="page-title">KB INTENTS <span id="intents-count" style="color:var(--cyan);font-size:0.6rem;letter-spacing:2px"></span>
|
||||||
<div class="actions">
|
<div class="actions">
|
||||||
<button class="btn btn-sm btn-green" onclick="intentModal()">+ ADD INTENT</button>
|
<button class="btn btn-sm btn-green" onclick="intentModal()">+ ADD INTENT</button>
|
||||||
<button class="btn btn-sm" onclick="loadIntents()">REFRESH</button>
|
<button class="btn btn-sm" onclick="loadIntents()">REFRESH</button>
|
||||||
@@ -785,7 +785,7 @@ select.filter-sel:focus{border-color:var(--cyan)}
|
|||||||
|
|
||||||
<!-- HOME ASSISTANT -->
|
<!-- HOME ASSISTANT -->
|
||||||
<div class="tab" id="tab-ha">
|
<div class="tab" id="tab-ha">
|
||||||
<div class="page-title">HOME ASSISTANT ENTITIES <span id="ha-title-count" style="font-size:0.6rem;color:var(--dim);letter-spacing:1px;font-weight:400"></span>
|
<div class="page-title">HOME ASSISTANT ENTITIES <span id="ha-title-count" style="color:var(--cyan);font-size:0.6rem;letter-spacing:2px"></span>
|
||||||
<div class="actions"><button class="btn btn-sm" onclick="loadHA()">REFRESH</button></div>
|
<div class="actions"><button class="btn btn-sm" onclick="loadHA()">REFRESH</button></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="filters">
|
<div class="filters">
|
||||||
@@ -821,7 +821,7 @@ select.filter-sel:focus{border-color:var(--cyan)}
|
|||||||
|
|
||||||
<!-- PROXMOX VMs -->
|
<!-- PROXMOX VMs -->
|
||||||
<div class="tab" id="tab-vms">
|
<div class="tab" id="tab-vms">
|
||||||
<div class="page-title">PROXMOX VMs <span id="vms-count" style="font-size:0.6rem;color:var(--dim);letter-spacing:1px;font-weight:400"></span>
|
<div class="page-title">PROXMOX VMs <span id="vms-count" style="color:var(--cyan);font-size:0.6rem;letter-spacing:2px"></span>
|
||||||
<div class="actions"><button class="btn btn-sm" onclick="loadVMs()">REFRESH</button></div>
|
<div class="actions"><button class="btn btn-sm" onclick="loadVMs()">REFRESH</button></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="tbl-wrap" id="vms-tbl"><div class="loading">SCANNING...</div></div>
|
<div class="tbl-wrap" id="vms-tbl"><div class="loading">SCANNING...</div></div>
|
||||||
@@ -1230,7 +1230,7 @@ function renderNetwork() {
|
|||||||
if (_netFilter === 'named') devs = devs.filter(d => d.alias);
|
if (_netFilter === 'named') devs = devs.filter(d => d.alias);
|
||||||
const onlineCount = _allDevices.filter(d=>d.status==='online').length;
|
const onlineCount = _allDevices.filter(d=>d.status==='online').length;
|
||||||
document.getElementById('net-count').textContent = `${onlineCount}/${_allDevices.length} ONLINE`;
|
document.getElementById('net-count').textContent = `${onlineCount}/${_allDevices.length} ONLINE`;
|
||||||
const _ntEl=document.getElementById('net-title-count'); if(_ntEl) _ntEl.textContent=`${onlineCount}/${_allDevices.length} ONLINE`;
|
const _ntEl=document.getElementById('net-title-count'); if(_ntEl) _ntEl.textContent=`${onlineCount} ONLINE / ${_allDevices.length} TOTAL`;
|
||||||
if (!devs.length) { document.getElementById('network-tbl').innerHTML='<div class="empty">NO DEVICES MATCH FILTER</div>'; return; }
|
if (!devs.length) { document.getElementById('network-tbl').innerHTML='<div class="empty">NO DEVICES MATCH FILTER</div>'; return; }
|
||||||
// Re-build shell (filter changed)
|
// Re-build shell (filter changed)
|
||||||
document.getElementById('network-tbl').innerHTML = `<table>
|
document.getElementById('network-tbl').innerHTML = `<table>
|
||||||
@@ -1356,7 +1356,7 @@ async function loadFactCategories() {
|
|||||||
sel.innerHTML = '<option value="__all__">ALL CATEGORIES</option>' +
|
sel.innerHTML = '<option value="__all__">ALL CATEGORIES</option>' +
|
||||||
cats.map(c=>`<option value="${esc(c.category)}">${esc(c.category)} (${c.cnt})</option>`).join('');
|
cats.map(c=>`<option value="${esc(c.category)}">${esc(c.category)} (${c.cnt})</option>`).join('');
|
||||||
const _factTotal = cats.reduce((s,c)=>s+parseInt(c.cnt||0),0);
|
const _factTotal = cats.reduce((s,c)=>s+parseInt(c.cnt||0),0);
|
||||||
const _factCntEl = document.getElementById('facts-count'); if(_factCntEl) _factCntEl.textContent=_factTotal.toLocaleString()+' FACTS';
|
const _factCntEl = document.getElementById('facts-count'); if(_factCntEl) _factCntEl.textContent=_factTotal.toLocaleString()+' TOTAL';
|
||||||
}
|
}
|
||||||
|
|
||||||
async function loadFacts() {
|
async function loadFacts() {
|
||||||
@@ -1513,7 +1513,7 @@ async function loadHA() {
|
|||||||
if (cur) sel.value = cur;
|
if (cur) sel.value = cur;
|
||||||
const age = data.ts ? Math.floor((Date.now()/1000)-data.ts) : null;
|
const age = data.ts ? Math.floor((Date.now()/1000)-data.ts) : null;
|
||||||
document.getElementById('ha-count').textContent = `${_haEntities.length} ENTITIES${age!=null?' · CACHE '+age+'s AGO':''}`;
|
document.getElementById('ha-count').textContent = `${_haEntities.length} ENTITIES${age!=null?' · CACHE '+age+'s AGO':''}`;
|
||||||
const _haTitleEl=document.getElementById('ha-title-count'); if(_haTitleEl) _haTitleEl.textContent=_haEntities.length.toLocaleString()+' ENTITIES';
|
const _haTitleEl=document.getElementById('ha-title-count'); if(_haTitleEl) _haTitleEl.textContent=_haEntities.length.toLocaleString()+' TOTAL';
|
||||||
renderHATable(_haEntities);
|
renderHATable(_haEntities);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1640,7 +1640,7 @@ async function loadVMs() {
|
|||||||
document.getElementById('vms-tbl').innerHTML='<div class="loading">SCANNING...</div>';
|
document.getElementById('vms-tbl').innerHTML='<div class="loading">SCANNING...</div>';
|
||||||
const data = await api('vms_list');
|
const data = await api('vms_list');
|
||||||
const vms = [...(data.vms||[]), ...(data.containers||[])];
|
const vms = [...(data.vms||[]), ...(data.containers||[])];
|
||||||
const _vmsCntEl=document.getElementById('vms-count'); if(_vmsCntEl){const _vmRun=vms.filter(v=>v.status==='running').length;_vmsCntEl.textContent=`${_vmRun}/${vms.length} RUNNING`;}
|
const _vmsCntEl=document.getElementById('vms-count'); if(_vmsCntEl){const _vmRun=vms.filter(v=>v.status==='running').length;_vmsCntEl.textContent=`${_vmRun} RUNNING / ${vms.length} TOTAL`;}
|
||||||
if (!vms.length) { document.getElementById('vms-tbl').innerHTML='<div class="empty">NO VM DATA — Proxmox cache empty, refreshes every 5 min</div>'; return; }
|
if (!vms.length) { document.getElementById('vms-tbl').innerHTML='<div class="empty">NO VM DATA — Proxmox cache empty, refreshes every 5 min</div>'; return; }
|
||||||
|
|
||||||
const ni = data.node_info||{};
|
const ni = data.node_info||{};
|
||||||
|
|||||||
Reference in New Issue
Block a user