package h import ( "html" "net/http" "reflect" "runtime" ) type Partial struct { Headers *Headers Root *Element } type Page struct { Root Ren HttpMethod string } func NewPage(root Ren) *Page { return &Page{ HttpMethod: http.MethodGet, Root: root, } } func NewPageWithHttpMethod(httpMethod string, root *Element) *Page { return &Page{ HttpMethod: httpMethod, Root: root, } } func NewPartialWithHeaders(headers *Headers, root *Element) *Partial { return &Partial{ Headers: headers, Root: root, } } func NewPartial(root *Element) *Partial { return &Partial{ Root: root, } } func SwapManyPartialWithHeaders(ctx *RequestContext, headers *Headers, swaps ...*Element) *Partial { return NewPartialWithHeaders( headers, SwapMany(ctx, swaps...), ) } func RedirectPartial(path string) *Partial { return RedirectPartialWithHeaders(path, NewHeaders()) } func RedirectPartialWithHeaders(path string, headers *Headers) *Partial { h := *NewHeaders("HX-Redirect", path) for k, v := range *headers { h[k] = v } return NewPartialWithHeaders(&h, Fragment()) } func SwapPartial(ctx *RequestContext, swap *Element) *Partial { return NewPartial( SwapMany(ctx, swap)) } func EmptyPartial() *Partial { return NewPartial(Fragment()) } func SwapManyPartial(ctx *RequestContext, swaps ...*Element) *Partial { return NewPartial( SwapMany(ctx, swaps...), ) } func SwapManyXPartial(ctx *RequestContext, swaps ...SwapArg) *Partial { return NewPartial( SwapManyX(ctx, swaps...), ) } func GetPartialPath(partial PartialFunc) string { return "/" + runtime.FuncForPC(reflect.ValueOf(partial).Pointer()).Name() } func GetPartialPathWithQs(partial func(ctx *RequestContext) *Partial, qs *Qs) string { return html.EscapeString(GetPartialPath(partial) + "?" + qs.ToString()) }