Evan Reichard
3cf374ea2b
Some checks reported errors
continuous-integration/drone/push Build was killed
82 lines
2.1 KiB
Plaintext
82 lines
2.1 KiB
Plaintext
package components
|
|
|
|
import (
|
|
"fmt"
|
|
"reichard.io/antholume/database"
|
|
"reichard.io/antholume/ngtemplates/common"
|
|
)
|
|
|
|
func FirstNonZero[T comparable](all ...T) T {
|
|
var zeroT T
|
|
for _, item := range all {
|
|
if item != zeroT {
|
|
return item
|
|
}
|
|
}
|
|
return zeroT
|
|
}
|
|
|
|
func orUnknown(val *string) string {
|
|
if val == nil {
|
|
return "Unknown"
|
|
}
|
|
return *val
|
|
}
|
|
|
|
templ DocumentCard(document database.GetDocumentsWithStatsRow) {
|
|
<div class="w-full relative">
|
|
<div
|
|
class="flex gap-4 w-full h-full p-4 shadow-lg bg-white dark:bg-gray-700 rounded"
|
|
>
|
|
<div class="min-w-fit my-auto h-48 relative">
|
|
<a href={ templ.SafeURL(fmt.Sprintf("./documents/%s", document.ID)) }>
|
|
<img
|
|
class="rounded object-cover h-full"
|
|
src={ fmt.Sprintf("./documents/%s/cover", document.ID) }
|
|
/>
|
|
</a>
|
|
</div>
|
|
<div class="flex flex-col justify-around dark:text-white w-full text-sm">
|
|
<div class="inline-flex shrink-0 items-center">
|
|
<div>
|
|
<p class="text-gray-400">Title</p>
|
|
<p class="font-medium">{ orUnknown(document.Title) }</p>
|
|
</div>
|
|
</div>
|
|
<div class="inline-flex shrink-0 items-center">
|
|
<div>
|
|
<p class="text-gray-400">Author</p>
|
|
<p class="font-medium">{ orUnknown(document.Author) }</p>
|
|
</div>
|
|
</div>
|
|
<div class="inline-flex shrink-0 items-center">
|
|
<div>
|
|
<p class="text-gray-400">Progress</p>
|
|
<p class="font-medium">{ fmt.Sprintf("%.2f%%", document.Percentage) }</p>
|
|
</div>
|
|
</div>
|
|
<div class="inline-flex shrink-0 items-center">
|
|
<div>
|
|
<p class="text-gray-400">Time Read</p>
|
|
<p class="font-medium">{ common.NiceSeconds(document.TotalTimeSeconds) }</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div
|
|
class="absolute flex flex-col gap-2 right-4 bottom-4 text-gray-500 dark:text-gray-400"
|
|
>
|
|
<a href="./activity?document={{ .ID }}">
|
|
@ActivitySVG("")
|
|
</a>
|
|
if document.Filepath != nil && *document.Filepath != "" {
|
|
<a href={ templ.SafeURL(fmt.Sprintf("./documents/%s/file", document.ID)) }>
|
|
@DownloadSVG("")
|
|
</a>
|
|
} else {
|
|
@DownloadSVG("text-gray-200 dark:text-gray-600")
|
|
}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|