lyrics

lyrics
git clone git://brookjeynes.dev/bjeynes/lyrics.git
Log | Files | Refs

commit 5793df9e357b0b622d0f87cfd27ee9b9efb23c2e
parent c5b40ca1750049fc833c714b02ef5f1410c4cdda
Author: brookjeynes <me@brookjeynes.dev>
Date:   Tue, 12 May 2026 18:12:27 +1000

fix: clean up song form and artist roles

Signed-off-by: brookjeynes <me@brookjeynes.dev>

Diffstat:
Minternal/db/db.go | 2+-
Minternal/server/ui/views/new-song/new-song.js | 2+-
Minternal/server/ui/views/new-song/new-song.templ | 4++--
Minternal/server/ui/views/song/song.templ | 4++++
4 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/internal/db/db.go b/internal/db/db.go @@ -125,7 +125,7 @@ func Make(ctx context.Context, dbPath string) (*DB, error) { role text not null, sort_order integer not null, - unique(song_id, sort_order), + unique(song_id, sort_order, role), foreign key (song_id) references songs(id) on delete cascade, foreign key (artist_id) references artists(id) on delete cascade, primary key (song_id, artist_id, role) diff --git a/internal/server/ui/views/new-song/new-song.js b/internal/server/ui/views/new-song/new-song.js @@ -1,7 +1,7 @@ // filter out unnecessary data from request const form = document.querySelector("form"); form.addEventListener("htmx:config:request", function(evt) { - if (!evt.detail.ctx.request.action.startsWith("/new")) return; + if (!evt.detail.ctx.request.action.startsWith("/song/new")) return; evt.detail.ctx.request.body.delete("artist"); evt.detail.ctx.request.body.delete("album"); evt.detail.ctx.request.body.delete("featuring"); diff --git a/internal/server/ui/views/new-song/new-song.templ b/internal/server/ui/views/new-song/new-song.templ @@ -11,7 +11,7 @@ templ NewSong(params NewSongParams) { @base.Base(base.BaseParams{Title: "new song"}) { <h1>Add a song</h1> <form - hx-post="/new" + hx-post="/song/new" hx-swap="none" hx-disable-elt="#add-song-btn" > @@ -109,7 +109,7 @@ templ NewSong(params NewSongParams) { hx-swap="outerHTML" name="album" autocomplete="off" - :required="!selected" + :required="!selected && id > 0" /> </label> <p x-show="selected"> diff --git a/internal/server/ui/views/song/song.templ b/internal/server/ui/views/song/song.templ @@ -2,6 +2,7 @@ package song import ( "fmt" + "lyrics/internal/domain" "lyrics/internal/server/ui/layouts/base" "time" ) @@ -26,6 +27,9 @@ templ Song(params SongParams) { if artist.Artist.LatinName != nil { <span>({ *artist.Artist.LatinName })</span> } + if artist.Role == domain.RoleFeatured { + [featured] + } </a> </li> }