feat: simplify open issues tab to link list
All checks were successful
Deploy to dev.bl.pixeldev.eu / deploy (push) Successful in 2s

Replace the verbose issue cards (body preview + inline comment form)
with a clean list of links: issue number, title, and an arrow to open
the issue on Gitea. Keeps the tab minimal and noise-free.

Closes #4
This commit is contained in:
OpenClaw Agent 2026-03-13 13:50:27 +00:00
parent a138c76041
commit be8c814da6

View File

@ -142,14 +142,13 @@ app.get(['/widget.js', BASE + '/widget.js'], (req, res) => {
.fb-btn:hover { opacity:.85; }
.fb-btn:disabled { opacity:.4; cursor:default; }
.fb-status { font-size:.8rem; text-align:center; min-height:1.1rem; }
.fb-issue-item { background:#0d0d0d; border:1px solid #222; border-radius:10px; padding:.9rem 1rem; }
.fb-issue-title { color:#e0e0e0; font-size:.9rem; font-weight:600; margin:0 0 .3rem; }
.fb-issue-meta { color:#555; font-size:.75rem; margin-bottom:.6rem; }
.fb-issue-body { color:#888; font-size:.8rem; margin-bottom:.7rem; white-space:pre-wrap; word-break:break-word; }
.fb-comment-area { display:flex; flex-direction:column; gap:.5rem; }
.fb-comment-input { min-height:55px; }
.fb-comment-btn { background:#2a2a2a; color:#ccc; font-size:.8rem; padding:.45rem .8rem; width:auto; align-self:flex-end; border-radius:6px; }
.fb-comment-btn:hover { background:#333; opacity:1; }
.fb-issue-link { display:flex; align-items:center; justify-content:space-between; gap:.5rem;
padding:.6rem .4rem; border-bottom:1px solid #1a1a1a; text-decoration:none; color:#e0e0e0;
font-size:.875rem; transition:color .15s; }
.fb-issue-link:last-child { border-bottom:none; }
.fb-issue-link:hover { color:#7c9ef5; }
.fb-issue-num { color:#555; font-size:.8rem; flex-shrink:0; }
.fb-issue-arrow { color:#444; font-size:.8rem; flex-shrink:0; }
.fb-empty { color:#555; font-size:.85rem; text-align:center; padding:1.5rem 0; }
.fb-loading { color:#555; font-size:.85rem; text-align:center; padding:1rem 0; }
/* Picker row inside new-issue form */
@ -382,34 +381,13 @@ app.get(['/widget.js', BASE + '/widget.js'], (req, res) => {
if (!issues.length) { list.innerHTML = '<div class="fb-empty">No open issues 🎉</div>'; return; }
list.innerHTML = '';
issues.forEach(function(issue) {
var el = document.createElement('div');
el.className = 'fb-issue-item';
var preview = (issue.body || '').replace(/---[\\s\\S]*$/, '').trim().slice(0, 150);
el.innerHTML = \`
<p class="fb-issue-title">#\${issue.number} \${esc(issue.title)}</p>
<p class="fb-issue-meta">\${issue.comments} comment\${issue.comments!==1?'s':''} · <a href="\${issue.url}" target="_blank" style="color:#7c9ef5;text-decoration:none;">view on Gitea </a></p>
\${preview ? '<p class="fb-issue-body">' + esc(preview) + '</p>' : ''}
<div class="fb-comment-area">
<textarea class="fb-input fb-textarea fb-comment-input" placeholder="Add a comment…" data-issue="\${issue.number}"></textarea>
<button class="fb-btn fb-comment-btn" data-issue="\${issue.number}">Comment</button>
</div>
\`;
list.appendChild(el);
el.querySelector('.fb-comment-btn').addEventListener('click', function() {
var num = this.dataset.issue;
var ta = el.querySelector('textarea[data-issue="'+num+'"]');
var body = ta.value.trim();
if (!body) return;
var btn = this;
btn.disabled = true; btn.textContent = 'Posting…';
fetch(SELF + '/api/comment', {
method: 'POST', headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ repo: cfg.repo, issue_number: num, body })
}).then(function(r) { return r.json(); }).then(function(d) {
if (d.ok) { ta.value=''; btn.textContent='✓ Posted!'; setTimeout(function(){ btn.textContent='Comment'; btn.disabled=false; }, 2000); }
else { btn.textContent='Error'; btn.disabled=false; }
}).catch(function() { btn.textContent='Error'; btn.disabled=false; });
});
var a = document.createElement('a');
a.className = 'fb-issue-link';
a.href = issue.url;
a.target = '_blank';
a.rel = 'noopener';
a.innerHTML = \`<span class="fb-issue-num">#\${issue.number}</span><span style="flex:1">\${esc(issue.title)}</span><span class="fb-issue-arrow">↗</span>\`;
list.appendChild(a);
});
}).catch(function() { list.innerHTML = '<div class="fb-empty">Failed to load issues.</div>'; });
}