Files
readeck/components/message.templ
T
Olivier Meunier 150596399f Templ sunrise
- Updated makefile so "make serve" watches for .templ files and
    rebuild files upon changes
- Added a "templ" make target
- Added a top level "components" module
- Added a "components/forms" module
- Added server.RenderComponent method
- Added server.RenderTurboStreamComponent
- Preferences lazy loading

We're now ready to roll!
2026-05-04 11:23:29 +02:00

62 lines
1.3 KiB
Plaintext

// SPDX-FileCopyrightText: © 2026 Olivier Meunier <olivier@neokraft.net>
//
// SPDX-License-Identifier: AGPL-3.0-only
package components
import (
"strings"
"codeberg.org/readeck/readeck/internal/server"
)
templ (mc *message) component() {
<div class={ templ.Classes("message", mc.typeClass, mc.class) } { mc.attrs... }>
if mc.icon != "" {
<div>
@Icon(mc.icon)
</div>
}
<div class="grow">
{ children... }
</div>
if mc.removable {
<div class="no-js:hidden">
<button data-action="remover#remove" class="remover">
@Icon("o-cross")
</button>
</div>
}
</div>
}
// Flashes shows the flash messages extracted from the user's session.
templ Flashes() {
if flashes := server.Flashes(server.GetRequest(ctx)); len(flashes) > 0 {
<div class="toaster">
for _, f := range flashes {
if !strings.HasPrefix(f.Type, "_") {
{{
msg := newMessage(
WithMessageType(f.Type),
WithMessageDelay(5),
WithMessageRemovable,
)
switch f.Type {
case "error":
msg.attrs["role"] = "alert"
default:
msg.attrs["role"] = "status"
}
}}
<div class="drop-shadow-sm mb-1">
@msg.component() {
<strong>{ f.Message }</strong>
}
</div>
}
}
</div>
}
}