121 lines
3.0 KiB
Go
121 lines
3.0 KiB
Go
|
package htmx
|
||
|
|
||
|
import "net/http"
|
||
|
|
||
|
type HTMX struct {
|
||
|
w http.ResponseWriter
|
||
|
r *http.Request
|
||
|
}
|
||
|
|
||
|
func New(w http.ResponseWriter, r *http.Request) *HTMX {
|
||
|
return &HTMX{
|
||
|
w: w,
|
||
|
r: r,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Request header methods
|
||
|
//
|
||
|
|
||
|
// True when the request is an HTMX request
|
||
|
func (h *HTMX) IsHtmxRequest() bool {
|
||
|
return h.r.Header.Get("HX-Request") == "true"
|
||
|
}
|
||
|
|
||
|
// Indicates that the request is via an element using hx-boost
|
||
|
func (h *HTMX) IsBoosted() bool {
|
||
|
return h.r.Header.Get("HX-Boosted") == "true"
|
||
|
}
|
||
|
|
||
|
// The current URL of the browser
|
||
|
func (h *HTMX) CurrentUrl() string {
|
||
|
return h.r.Header.Get("HX-Current-URL")
|
||
|
}
|
||
|
|
||
|
// If the request is for history restoration after a miss in the local history cache
|
||
|
func (h *HTMX) IsHistoryRestore() bool {
|
||
|
return h.r.Header.Get("HX-History-Restore") == "true"
|
||
|
}
|
||
|
|
||
|
// The id of the element that triggered the request
|
||
|
func (h *HTMX) TriggerId() string {
|
||
|
return h.r.Header.Get("HX-Trigger")
|
||
|
}
|
||
|
|
||
|
// The name of the element that triggered the request
|
||
|
func (h *HTMX) TriggerName() string {
|
||
|
return h.r.Header.Get("HX-Trigger-Name")
|
||
|
}
|
||
|
|
||
|
// The id of the target element
|
||
|
func (h *HTMX) TargetId() string {
|
||
|
return h.r.Header.Get("HX-Target")
|
||
|
}
|
||
|
|
||
|
// The value entered by the user when prompted via hx-prompt
|
||
|
func (h *HTMX) Prompt() string {
|
||
|
return h.r.Header.Get("HX-Prompt")
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Response header methods
|
||
|
//
|
||
|
|
||
|
// Pushe a new url into the history stack
|
||
|
func (h *HTMX) PushUrl(url string) {
|
||
|
h.w.Header().Set("HX-Push", url)
|
||
|
}
|
||
|
|
||
|
// Trigger a client-side redirect to a new location
|
||
|
func (h *HTMX) RedirectTo(url string) {
|
||
|
h.w.Header().Set("HX-Redirect", url)
|
||
|
}
|
||
|
|
||
|
// Triggers a client-side redirect to a new location that acts as a swap
|
||
|
func (h *HTMX) Location(url string) {
|
||
|
h.w.Header().Set("Location", url)
|
||
|
}
|
||
|
|
||
|
// Replace the current URL in the location bar
|
||
|
func (h *HTMX) ReplaceUrl(url string) {
|
||
|
h.w.Header().Set("HX-Replace-Url", url)
|
||
|
}
|
||
|
|
||
|
// Sets refresh to true causing the client side to do a full refresh of the page
|
||
|
func (h *HTMX) Refresh() {
|
||
|
h.w.Header().Set("HX-Refresh", "true")
|
||
|
}
|
||
|
|
||
|
// Trigger client side events
|
||
|
func (h *HTMX) Trigger(name string) {
|
||
|
h.w.Header().Set("HX-Trigger", name)
|
||
|
}
|
||
|
|
||
|
// Trigger client side events after the swap step
|
||
|
func (h *HTMX) TriggerAfterSwap(name string) {
|
||
|
h.w.Header().Set("HX-Trigger-After-Swap", name)
|
||
|
}
|
||
|
|
||
|
// Trigger client side events after the settle step
|
||
|
func (h *HTMX) TriggerAfterSettle(name string) {
|
||
|
h.w.Header().Set("HX-Trigger-After-Settle", name)
|
||
|
}
|
||
|
|
||
|
// Specify how the response will be swapped. See hx-swap for possible values
|
||
|
func (h *HTMX) Reswap(value string) {
|
||
|
h.w.Header().Set("HX-Reswap", value)
|
||
|
}
|
||
|
|
||
|
// Update the target of the content update to a different element on the page
|
||
|
// Value should be a CSS selector.
|
||
|
func (h *HTMX) Retarget(value string) {
|
||
|
h.w.Header().Set("HX-Retarget", value)
|
||
|
}
|
||
|
|
||
|
// Choose which part of the response is used to be swapped in. Overrides an existing hx-select on the triggering element.
|
||
|
// Value should be a CSS selector.
|
||
|
func (h *HTMX) Reselect(value string) {
|
||
|
h.w.Header().Set("HX-Reselect", value)
|
||
|
}
|