← back to Bubbesblock
public/groups.html
35 lines
<!DOCTYPE html>
<html lang="en"><head>
<meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>BubbesBlock — Groups</title><link rel="stylesheet" href="/styles.css" />
</head><body>
<div id="hdr"></div>
<div class="wrap"><div id="left"></div><main class="col-center" id="main"></main><div id="right"></div></div>
<script>window.__bbAutoInit = false;</script>
<script src="/chrome.js"></script><script src="/app.js"></script>
<script>
function tile(g){
return `<div class="tile" data-grp="${g.slug}">
<span class="lg" style="background:${g.color||'#3a7d5d'}">${g.emoji||'👥'}</span>
<div class="main"><b>${g.name}</b><div class="meta2"><span class="mem">${g.members}</span> members</div>
<div class="meta2" style="margin-top:4px">${g.blurb||''}</div></div>
<div class="act"><button class="${g.youJoined?'on':''}" data-join="${g.slug}">${g.youJoined?'Joined ✓':'Join'}</button></div>
</div>`;
}
Promise.all([fetch('/api/me',{credentials:'same-origin'}).then(r=>r.json()), fetch('/api/groups',{credentials:'same-origin'}).then(r=>r.json())]).then(([m,d])=>{
document.getElementById('hdr').innerHTML=topbar(m.me);
document.getElementById('left').innerHTML=leftRail(m.me);
document.getElementById('right').innerHTML=rightRail(m.me);
document.getElementById('main').innerHTML='<div class="listhd">👥 Your Block · Groups</div>'+(d.groups||[]).map(tile).join('');
BB.init();
});
document.addEventListener('click', async e=>{
const b=e.target.closest('[data-join]'); if(!b) return;
if(!(await BB.ensureAuth())) return;
try{ const r=await BB.api.post(`/api/groups/${b.dataset.join}/join`,{});
b.classList.toggle('on',r.joined); b.textContent=r.joined?'Joined ✓':'Join';
const m=b.closest('.tile').querySelector('.mem'); if(m) m.textContent=r.members;
}catch{ BB.toast('Try again'); }
});
</script></body></html>