package views import ( "strings" "github.com/arnef/ebooks/internal/library" ) templ Layout(title string, backHref string) { { title }
if backHref != "" { }

eBook Library

{ children... }
} templ LoginLayout(title string) { { title }
{ children... }
} templ LoginPage(errMsg string) { @LoginLayout("Anmelden") {

Anmelden

if errMsg != "" {

{ errMsg }

}
} } templ UploadPage(errMsg string) { @Layout("Buch hochladen", "/") {

Buch hochladen

if errMsg != "" {

{ errMsg }

}
} } templ BookCover(book library.Book, detail bool) { if book.HasCover { { } else { } } templ IndexPage(books []library.Book, canUpload bool) { @Layout("Bibliothek", "") {

Meine Bücher

Titel, Autor und Cover auf einen Blick.

if canUpload { Buch hochladen }
if len(books) == 0 {

Keine eBooks gefunden. Lege EPUB- oder PDF-Dateien im Ordner books/ ab.

} else { } } } templ BookPage(book library.Book) { @Layout(book.Title, "/") {
@BookCover(book, true)

{ book.Title }

{ book.Author }

Datei
{ book.Filename }
Format
{ book.Format }

Auf Tolino herunterladen

} } func coverClass(detail bool) string { if detail { return "book-cover book-cover-detail" } return "book-cover" } func placeholderClass(detail bool) string { if detail { return "book-cover-placeholder book-cover-placeholder-detail" } return "book-cover-placeholder" } // truncateTitle kürzt lange Titel für die Kartenansicht, damit lange, // nicht umbrechbare Titel das Grid-Layout nicht sprengen. Der volle Titel // bleibt im Detail-Seiten-Titel und im alt-Text des Covers erhalten. func truncateTitle(title string, maxLen int) string { r := []rune(title) if len(r) <= maxLen { return title } return string(r[:maxLen]) + "…" }