Files
nebula/htmx/response.go

104 lines
2.1 KiB
Go
Raw Permalink Normal View History

package htmx
import (
"encoding/json"
"net/http"
)
type Response struct {
w http.ResponseWriter
}
func NewResponse(w http.ResponseWriter) *Response {
return &Response{w: w}
}
func (r *Response) Header() http.Header {
return r.w.Header()
}
func (r *Response) Location(url string) *Response {
r.w.Header().Set("HX-Location", url)
return r
}
func (r *Response) LocationWithTarget(url, target string) *Response {
data, _ := json.Marshal(map[string]string{"path": url, "target": target})
r.w.Header().Set("HX-Location", string(data))
return r
}
func (r *Response) PushURL(url string) *Response {
r.w.Header().Set("HX-Push-Url", url)
return r
}
func (r *Response) ReplaceURL(url string) *Response {
r.w.Header().Set("HX-Replace-Url", url)
return r
}
func (r *Response) Redirect(url string) *Response {
r.w.Header().Set("HX-Redirect", url)
return r
}
func (r *Response) Refresh() *Response {
r.w.Header().Set("HX-Refresh", "true")
return r
}
func (r *Response) Reswap(strategy string) *Response {
r.w.Header().Set("HX-Reswap", strategy)
return r
}
func (r *Response) ReswapWithModifiers(strategy string) *Response {
r.w.Header().Set("HX-Reswap", strategy)
return r
}
func (r *Response) Retarget(selector string) *Response {
r.w.Header().Set("HX-Retarget", selector)
return r
}
func (r *Response) Reselect(selector string) *Response {
r.w.Header().Set("HX-Reselect", selector)
return r
}
func (r *Response) Trigger(event string) *Response {
r.w.Header().Set("HX-Trigger", event)
return r
}
func (r *Response) TriggerWithData(event string, data any) *Response {
payload, _ := json.Marshal(map[string]any{event: data})
r.w.Header().Set("HX-Trigger", string(payload))
return r
}
func (r *Response) TriggerAfterSwap(event string) *Response {
r.w.Header().Set("HX-Trigger-After-Swap", event)
return r
}
func (r *Response) TriggerAfterSettle(event string) *Response {
r.w.Header().Set("HX-Trigger-After-Settle", event)
return r
}
func (r *Response) StopPolling() *Response {
r.w.WriteHeader(286)
return r
}
func (r *Response) NoContent() {
r.w.WriteHeader(http.StatusNoContent)
}
func (r *Response) PreventSwap() *Response {
return r.Reswap("none")
}