diff --git a/public/admin.html b/public/admin.html index 930f412..dd8578e 100644 --- a/public/admin.html +++ b/public/admin.html @@ -120,6 +120,8 @@ .btn-reject { background: var(--red); color: #fff; } .btn-delete { background: transparent; border: 1px solid var(--border); color: var(--text-muted); } .btn-delete:hover { border-color: var(--red); color: var(--red); } + .btn-edit { background: transparent; border: 1px solid var(--border); color: var(--amber); } + .btn-edit:hover { border-color: var(--amber); color: #fcd34d; } .btn-row { display: flex; gap: 6px; flex-shrink: 0; } /* Toast */ @@ -278,6 +280,7 @@ function renderPending() {
${o.name}
by ${o.addedBy || 'unknown'}
+
@@ -295,12 +298,45 @@ function renderAll() {
${o.votes.length} vote${o.votes.length !== 1 ? 's' : ''}
${o.addedBy !== 'system' ? 'by ' + o.addedBy : 'system'}
+
`).join(''); } +async function editOption(id) { + const current = allData.options.find(o => o.id === id); + if (!current) return; + const nextName = prompt('Option name', current.name); + if (nextName === null) return; + const nextDesc = prompt('Short description', current.desc || ''); + if (nextDesc === null) return; + const nextDetails = prompt('Details, one per line', Array.isArray(current.details) ? current.details.join('\\n') : ''); + if (nextDetails === null) return; + const nextUrl = prompt('Website URL', current.url || ''); + if (nextUrl === null) return; + const nextCategory = prompt('Category id', current.categoryId); + if (nextCategory === null) return; + const nextApproved = confirm('Approve this option now? Click OK to approve, Cancel to keep it pending.'); + try { + await fetch(API + '/api/options/' + id, { + method: 'PATCH', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + name: nextName.trim(), + desc: nextDesc.trim(), + details: nextDetails, + url: nextUrl.trim(), + categoryId: nextCategory.trim(), + approved: nextApproved, + }) + }); + toast('Option updated', 'success'); + await loadData(); + } catch(e) { toast('Failed to update option', 'error'); } +} + async function togglePolls() { try { // Get current state first diff --git a/public/index.html b/public/index.html index 375aabc..cb143f0 100644 --- a/public/index.html +++ b/public/index.html @@ -1638,6 +1638,7 @@
+