Add download option and CD disc artwork to finished books; v2.0.31
Publish Container / docker (push) Successful in 14m49s
Publish Container / docker (push) Successful in 14m49s
- Add downloadUrl field to FinishedBook type - Admin: paste any external URL (Drive, Dropbox, etc.) per finished book - Public series page: replace square hero image with circular CD disc artwork (conic-gradient sheen, center hole, drop shadow, slight tilt) - Stream Episodes + Download Album action buttons in the hero - Grid cards show a gold download badge when a download URL is set Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
65623ce0eb
commit
e86594b096
5 files changed
+180
-4
No files matched your search
@@ -4190,6 +4190,10 @@ async function handleAssetUpload(event: ChangeEvent<HTMLInputElement>) {
|
||||
<label>Season Number</label>
|
||||
<input type="number" value={book.season} onChange={e => setForm(f => ({ ...f, finishedBooks: (f.finishedBooks ?? []).map(b => b.id === book.id ? { ...b, season: parseInt(e.target.value) || 1 } : b) }))} />
|
||||
</div>
|
||||
<div className="admin-field">
|
||||
<label>Download URL <span style={{ fontWeight: 400, opacity: 0.7 }}>(ZIP — Google Drive, Dropbox, etc.)</span></label>
|
||||
<input type="url" placeholder="https://drive.google.com/…" value={book.downloadUrl ?? ''} onChange={e => setForm(f => ({ ...f, finishedBooks: (f.finishedBooks ?? []).map(b => b.id === book.id ? { ...b, downloadUrl: e.target.value } : b) }))} />
|
||||
</div>
|
||||
</div>
|
||||
<button type="button" className="btn-admin-remove" onClick={() => setForm(f => ({ ...f, finishedBooks: (f.finishedBooks ?? []).filter(b => b.id !== book.id) }))}>Remove</button>
|
||||
</div>
|
||||
|
||||
Reference in new issue
Block a user