diff --git a/internal/category/category_test.go b/internal/category/category_test.go index 5dba354..9cfea1c 100644 --- a/internal/category/category_test.go +++ b/internal/category/category_test.go @@ -14,8 +14,10 @@ import ( func mockHandler(response string, statusCode int) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(statusCode) - if _, err := fmt.Fprintln(w, response); err != nil { - panic(err) + if statusCode != http.StatusNoContent { + if _, err := fmt.Fprintln(w, response); err != nil { + panic(err) + } } } } @@ -42,7 +44,7 @@ func TestFetchData(t *testing.T) { panic(err) } case "/v1/feeds/1/icon": - if _, err := fmt.Fprintln(w, `{"data": "icon-data", "mime_type": "image/png"}`); err != nil { + if _, err := fmt.Fprintln(w, `{"data": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAHElEQVQ4T2Nksr/85wADGGYw4oBMAHkAAAD//wMA/wEAP2D3e/gAAAAASUVORK5CYII=", "mime_type": "image/png"}`); err != nil { panic(err) } } @@ -73,8 +75,8 @@ func TestFetchData(t *testing.T) { t.Errorf("Expected 1 feed icon, got %d", len(data.FeedIcons)) } - if data.FeedIcons[0].Data != "icon-data" { - t.Errorf("Expected feed icon data 'icon-data', got %s", data.FeedIcons[0].Data) + if data.FeedIcons[0].Data != "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAHElEQVQ4T2Nksr/85wADGGYw4oBMAHkAAAD//wMA/wEAP2D3e/gAAAAASUVORK5CYII=" { + t.Errorf("Expected feed icon data 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAHElEQVQ4T2Nksr/85wADGGYw4oBMAHkAAAD//wMA/wEAP2D3e/gAAAAASUVORK5CYII=', got %s", data.FeedIcons[0].Data) } } @@ -94,7 +96,7 @@ func TestStreamData(t *testing.T) { panic(err) } case "/v1/feeds/1/icon": - if _, err := fmt.Fprintln(w, `{"data": "icon-data", "mime_type": "image/png"}`); err != nil { + if _, err := fmt.Fprintln(w, `{"data": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAHElEQVQ4T2Nksr/85wADGGYw4oBMAHkAAAD//wMA/wEAP2D3e/gAAAAASUVORK5CYII=", "mime_type": "image/png"}`); err != nil { panic(err) } } diff --git a/internal/templates/entries.gohtml b/internal/templates/entries.gohtml index 30ef8e6..6669bac 100644 --- a/internal/templates/entries.gohtml +++ b/internal/templates/entries.gohtml @@ -42,7 +42,7 @@ section.entry { background-color: #f9fafb; border-radius: 0.5rem; - padding: 0.5rem; + padding: 0; margin-bottom: 1rem; border: 1px solid #e5e7eb; } @@ -55,7 +55,7 @@ summary.entry { font-size: 1.25rem; font-weight: 600; - margin-bottom: 0.5rem; + padding: 0.5rem; cursor: pointer; color: #1d4ed8; text-decoration: none; @@ -86,6 +86,23 @@ gap: 0.25rem; align-items: center; justify-content: start; + border-top: 1px solid #e5e7eb; + } + + .entry-meta-tab { + padding: 0.25rem 0.5rem; + border-right: 1px solid #e5e7eb; + display: flex; + } + + .entry-meta-tab-feed { + display: flex; + align-items: center; + gap: 0.25rem; + } + + .entry-meta-tab:last-child { + border-right: none; } .entry-content { @@ -125,14 +142,25 @@ background-color: rgba(59, 130, 246, 0.1); } + details.entry { + } + details.entry h1 { font-size: 1.5rem; margin-top: 1rem; margin-bottom: 0.5rem; } + details summary { + cursor: pointer; + } + + details summary > * { + display: inline; + } + {{range .FeedIcons}} - div.feed-icon-{{.FeedID}} { + div.feed-icon-{{.FeedID}} { background-image: url("data:{{.Data}}"); background-size: contain; width: 16px; @@ -162,21 +190,22 @@