← back to Agent Abrams Kanban
chore: lint (strict-eq, dedup .card rule) + refactor (cache stat els, single now() snapshot, cache avatar query) — session close
3dfa365718bfd6103be2df64ac74114b6b30027f · 2026-07-25 00:45:48 -0700 · Steve
Files touched
Diff
commit 3dfa365718bfd6103be2df64ac74114b6b30027f
Author: Steve <steve@designerwallcoverings.com>
Date: Sat Jul 25 00:45:48 2026 -0700
chore: lint (strict-eq, dedup .card rule) + refactor (cache stat els, single now() snapshot, cache avatar query) — session close
---
index.html | 41 +++++++++++++++++++++++------------------
1 file changed, 23 insertions(+), 18 deletions(-)
diff --git a/index.html b/index.html
index e4c0a0f..92d52e0 100644
--- a/index.html
+++ b/index.html
@@ -63,7 +63,6 @@ body::before{
.controls button:hover{color:var(--ink);border-color:rgba(255,255,255,0.28);background:rgba(255,255,255,0.09)}
.controls button.active{color:#06060b;background:var(--running);border-color:var(--running);box-shadow:0 0 12px rgba(0,229,255,.4)}
.controls button.paused{color:#06060b;background:var(--shipped);border-color:var(--shipped);box-shadow:0 0 12px rgba(255,176,32,.4)}
-.card{cursor:pointer}
.board{
flex:1;min-height:0;
@@ -114,7 +113,7 @@ body::before{
border-left:3px solid var(--muted);
border-radius:10px;padding:11px 12px;
box-shadow:0 4px 10px rgba(0,0,0,0.35);
- will-change:transform;
+ will-change:transform;cursor:pointer;
}
.card.enter{animation:pop .45s cubic-bezier(.2,.9,.25,1.2)}
@keyframes pop{from{opacity:0;transform:translateY(-8px) scale(.96)}to{opacity:1;transform:none}}
@@ -237,13 +236,15 @@ body::before{
function makeTask(seedStage){
const agent = pick(AGENTS);
+ const stage = seedStage || 'queued';
+ const t0 = now();
const t = {
id: ++uid,
title: pick(TASK_NAMES)+"-"+rint(100,999),
agent,
- status: seedStage || 'queued',
- createdAt: now(),
- nextAt: now() + dwell(seedStage||'queued'),
+ status: stage,
+ createdAt: t0,
+ nextAt: t0 + dwell(stage),
el: null,
};
t.el = buildEl(t);
@@ -293,9 +294,10 @@ body::before{
t.agent = pick(AGENTS);
t.createdAt = now();
const initials = t.agent.n.slice(0,2).toUpperCase();
- t.el.querySelector('.avatar').style.background = t.agent.c;
- t.el.querySelector('.avatar').style.color = t.agent.c;
- t.el.querySelector('.avatar span').textContent = initials;
+ const av = t.el.querySelector('.avatar');
+ av.style.background = t.agent.c;
+ av.style.color = t.agent.c;
+ av.querySelector('span').textContent = initials;
t.el.querySelector('.title').textContent = t.title;
t.el.querySelector('.agent').textContent = '◈ '+t.agent.n;
moveWithFlip(t, 'queued');
@@ -307,7 +309,7 @@ body::before{
function refreshCounts(){
STAGES.forEach(s=>{
const n = tasks.filter(t=>t.status===s).length;
- if(counts[s].textContent != n) counts[s].textContent = n;
+ if(counts[s].textContent !== String(n)) counts[s].textContent = n;
});
}
@@ -346,6 +348,15 @@ body::before{
setTimeout(()=>c.classList.remove('bump'),260);
}
+ // ---- controls / cached stat elements ----
+ const btnPause = document.getElementById('btnPause');
+ const btnSpeed = document.getElementById('btnSpeed');
+ const btnSpawn = document.getElementById('btnSpawn');
+ const elUptime = document.getElementById('uptime');
+ const elShipped = document.getElementById('shipCount');
+ const elTput = document.getElementById('tput');
+ const SPEEDS = [1,2,4];
+
// ---- ticks ----
function tickAdvance(){
if(paused) return;
@@ -378,18 +389,12 @@ body::before{
}
// header stats (virtual clock => frozen while paused)
const up = now() - startV;
- document.getElementById('uptime').textContent = fmt(up);
- document.getElementById('shipCount').textContent = shippedTotal;
+ elUptime.textContent = fmt(up);
+ elShipped.textContent = shippedTotal;
const mins = up/60000;
- document.getElementById('tput').textContent = mins>0 ? (shippedTotal/mins).toFixed(1) : '0.0';
+ elTput.textContent = mins>0 ? (shippedTotal/mins).toFixed(1) : '0.0';
}
- // ---- controls ----
- const btnPause = document.getElementById('btnPause');
- const btnSpeed = document.getElementById('btnSpeed');
- const btnSpawn = document.getElementById('btnSpawn');
- const SPEEDS = [1,2,4];
-
btnPause.addEventListener('click',()=>{
paused = !paused;
if(paused){ pauseStart = performance.now(); }
← 3a5fb88 Add interactive controls (pause/speed/spawn/click-advance) +
·
back to Agent Abrams Kanban
·
(newest)