65 lines
1 KiB
Go
65 lines
1 KiB
Go
package h
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/gofiber/fiber/v2"
|
|
"net/url"
|
|
)
|
|
|
|
type Renderable interface {
|
|
Render() *Node
|
|
}
|
|
|
|
func Ternary[T any](value bool, a T, b T) T {
|
|
if value {
|
|
return a
|
|
}
|
|
return b
|
|
}
|
|
|
|
func Map[T any, U any](items []T, fn func(T) U) []U {
|
|
var result []U
|
|
for _, item := range items {
|
|
result = append(result, fn(item))
|
|
}
|
|
return result
|
|
}
|
|
|
|
func JsonSerialize(data any) string {
|
|
serialized, err := json.Marshal(data)
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
return string(serialized)
|
|
}
|
|
|
|
func GetQueryParam(ctx *fiber.Ctx, key string) string {
|
|
value := ctx.Query(key)
|
|
if value == "" {
|
|
current := ctx.Get("Hx-Current-Url")
|
|
if current != "" {
|
|
u, err := url.Parse(current)
|
|
if err == nil {
|
|
return u.Query().Get(key)
|
|
}
|
|
}
|
|
}
|
|
return value
|
|
}
|
|
|
|
func SetQueryParams(href string, qs map[string]string) string {
|
|
u, err := url.Parse(href)
|
|
if err != nil {
|
|
return href
|
|
}
|
|
q := u.Query()
|
|
for key, value := range qs {
|
|
if value == "" {
|
|
q.Del(key)
|
|
} else {
|
|
q.Set(key, value)
|
|
}
|
|
}
|
|
u.RawQuery = q.Encode()
|
|
return u.String()
|
|
}
|