diff --git a/components.css b/components.css index 63bc860..b20b762 100644 --- a/components.css +++ b/components.css @@ -544,8 +544,6 @@ } #viewVariant { - bottom: auto; - min-height: 300px; } /* ── Action Bar ── */ diff --git a/index.html b/index.html index b6916b0..eba3a50 100644 --- a/index.html +++ b/index.html @@ -493,7 +493,7 @@

This art inspiration

]; const allDots = [...topDots, ...bottomDots]; - const submittedDots = allDots.filter(d => d.s); + const submittedDots = []; let viewIndex = 0; /* ──────────────────────────────────────────────── @@ -514,7 +514,6 @@

This art inspiration

el.addEventListener('mouseenter', () => showTooltip(dot, el)); el.addEventListener('mouseleave', hideTooltip); } else { - el.disabled = true; el.setAttribute('aria-hidden', 'true'); el.tabIndex = -1; } @@ -524,6 +523,7 @@

This art inspiration

renderDots('topContent', topDots); renderDots('bottomContent', bottomDots); + loadSubmittedDots(); /* ──────────────────────────────────────────────── DOT TOOLTIP @@ -685,7 +685,9 @@

This art inspiration

chip.style.backgroundColor = REL_CHIP_DULL[color] || 'var(--fg-blue-dull)'; chip.style.borderColor = DOT_BORDER_COLOR[color] || '#00CCCF'; - document.getElementById('vw-feedback').textContent = '\u201c' + f.t + '\u201d'; + document.getElementById('vw-feedback').textContent = f.t + ? '\u201c' + f.t + '\u201d' + : 'No public feedback shared yet.'; showOnly(viewBox); openPanel(); @@ -829,7 +831,6 @@

This art inspiration

const el = document.getElementById('dot-' + target.id); if (el) { el.classList.add('dot--submitted'); - el.disabled = false; el.removeAttribute('aria-hidden'); el.tabIndex = 0; el.setAttribute('aria-label', `View feedback from ${target.f.n}`); @@ -866,6 +867,10 @@

This art inspiration

| **Role** | ${pub.r} | | **Relationship** | ${pub.rel} | +### 💬 Public feedback + +${pub.t || '_Not provided_'} + --- ### 🔒 Private (only you can see this) @@ -882,7 +887,7 @@

This art inspiration

fetch('https://api.github.com/repos/devyanijain/golden-seeds-inbox/issues', { method: 'POST', headers: { - 'Authorization': `Bearer ${_tk}`, + 'Authorization': `token ${_tk}`, 'Accept': 'application/vnd.github+json', 'Content-Type': 'application/json', 'X-GitHub-Api-Version': '2022-11-28', @@ -950,6 +955,69 @@

This art inspiration

document.getElementById('dotSearchInput').addEventListener('input', e => { searchHighlight(e.target.value); }); + + /* ──────────────────────────────────────────────── + LOAD SUBMITTED DOTS FROM INBOX (on every page load) + Fetches the golden-seeds-inbox issues, parses each + submission, and hydrates the matching dot in the DOM + so all visitors see everyone who has planted a dot. + ──────────────────────────────────────────────── */ + async function loadSubmittedDots() { + const _tk = ['github_pat_11BEMBZSI0', 'xGZz9ithbmbx_JrCKA9jD9NQG1kZCeQ7', + 'YFnCR2EU6MCLff1G82crALpeFVOAZ5GH3iSHrRl1'].join(''); + try { + const res = await fetch( + 'https://api.github.com/repos/devyanijain/golden-seeds-inbox/issues?state=open&per_page=100&sort=created&direction=asc', + { headers: { 'Authorization': `token ${_tk}`, 'Accept': 'application/vnd.github+json' } } + ); + if (!res.ok) return; + const issues = await res.json(); + + // Build per-color queues of unsubmitted dots (preserves array order) + const queues = {}; + for (const dot of allDots) { + if (dot.s) continue; + if (!queues[dot.c]) queues[dot.c] = []; + queues[dot.c].push(dot); + } + + for (const issue of issues) { + if (issue.title?.startsWith('[Test]')) continue; + const body = issue.body || ''; + const nameMatch = body.match(/\|\s*\*\*Name\*\*\s*\|\s*(.+?)\s*\|/); + const roleMatch = body.match(/\|\s*\*\*Role\*\*\s*\|\s*(.+?)\s*\|/); + const relMatch = body.match(/\|\s*\*\*Relationship\*\*\s*\|\s*(.+?)\s*\|/); + const feedMatch = body.match(/### 💬 Public feedback\n\n([\s\S]*?)\n\n---/); + + if (!nameMatch || !relMatch) continue; + const name = nameMatch[1].trim(); + if (name === 'Anonymous') continue; + + const role = roleMatch ? roleMatch[1].trim() : '—'; + const rel = relMatch[1].trim(); + const feed = (feedMatch?.[1] || '').replace(/^_Not provided_$/, '').trim(); + const color = REL_COLOR[rel]; + + if (!color || !queues[color]?.length) continue; + const dot = queues[color].shift(); + dot.s = true; + dot.f = { n: name, r: role, rel, t: feed }; + submittedDots.push(dot); + + // Hydrate the already-rendered dot element + const el = document.getElementById('dot-' + dot.id); + if (el) { + el.classList.add('dot--submitted'); + el.removeAttribute('aria-hidden'); + el.tabIndex = 0; + el.setAttribute('aria-label', `View feedback from ${dot.f.n}`); + el.addEventListener('click', () => showFeedback(dot, el)); + el.addEventListener('mouseenter', () => showTooltip(dot, el)); + el.addEventListener('mouseleave', hideTooltip); + } + } + } catch (_) { /* silent — never break the page */ } + }