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") }