Files
maxwarden/ui/extensions.go

71 lines
1.4 KiB
Go

// This file contains a few extensions to the "gomponents" library.
package ui
import (
"maxwarden/security"
. "maragu.dev/gomponents"
)
// Map a `map[T]U` to a [Group]
func MapMap[T comparable, U comparable](m map[T]U, cb func(U) Node) Group {
var nodes []Node
for k, _ := range m {
nodes = append(nodes, cb(m[k]))
}
return nodes
}
// Map a `map[T]U` to a [Group]
// The callback provided must take the map key as an argument
func MapMapWithKey[T comparable, U comparable](m map[T]U, cb func(T, U) Node) Group {
var nodes []Node
for k, _ := range m {
nodes = append(nodes, cb(k, m[k]))
}
return nodes
}
// Map a slice of anything to a [Group] (which is just a slice of [Node]-s).
// The callback must accept the index as an argument.
func MapWithIndex[T any](collection []T, callback func(index int, item T) Node) Group {
nodes := make([]Node, 0, len(collection))
for index, item := range collection {
nodes = append(nodes, callback(index, item))
}
return nodes
}
func IfElse(condition bool, t Node, f Node) Node {
if condition {
return t
} else {
return f
}
}
func IffElse(condition bool, t func() Node, f func() Node) Node {
if condition {
return t()
} else {
return f()
}
}
// Sanitizes user input HTML
func SafeRaw(html string) Node {
sanitized := security.SanitizationPolicy.Sanitize(html)
return Raw(sanitized)
}
func CSSID(input string) string {
return "#" + input
}
func Open() Node {
return Attr("open")
}