From f115fcb60276ca116626cd1a09e4cbc1c6c3393b Mon Sep 17 00:00:00 2001 From: mikestefanello Date: Thu, 23 Dec 2021 17:09:23 -0500 Subject: [PATCH] Added htmx package. --- controller/htmx.go | 49 ----------------------------- htmx/htmx.go | 78 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 49 deletions(-) delete mode 100644 controller/htmx.go create mode 100644 htmx/htmx.go diff --git a/controller/htmx.go b/controller/htmx.go deleted file mode 100644 index ff684aa..0000000 --- a/controller/htmx.go +++ /dev/null @@ -1,49 +0,0 @@ -package controller - -import ( - "github.com/labstack/echo/v4" -) - -// HTMX headers (https://htmx.org/docs/#requests) -const ( - HTMXHeaderRequest = "HX-Request" - HTMXHeaderTrigger = "HX-Trigger" - HTMXHeaderTriggerName = "HX-Trigger-Name" - HTMXHeaderTriggerAfterSwap = "HX-Trigger-After-Swap" - HTMXHeaderTriggerAfterSettle = "HX-Trigger-After-Settle" - HTMXHeaderTarget = "HX-Target" - HTMXHeaderPrompt = "HX-Prompt" - HTMXHeaderPush = "HX-Push" - HTMXHeaderRedirect = "HX-Redirect" - HTMXHeaderRefresh = "HX-Refresh" -) - -type ( - HTMXRequest struct { - Enabled bool - Trigger string - TriggerName string - Target string - Prompt string - } - - HTMXResponse struct { - Push string - Redirect string - Refresh bool - Trigger string - TriggerAfterSwap string - TriggerAfterSettle string - // TODO: No content 204 response? - } -) - -func GetHTMXRequest(ctx echo.Context) HTMXRequest { - return HTMXRequest{ - Enabled: ctx.Request().Header.Get(HTMXHeaderRequest) == "true", - Trigger: ctx.Request().Header.Get(HTMXHeaderTrigger), - TriggerName: ctx.Request().Header.Get(HTMXHeaderTriggerName), - Target: ctx.Request().Header.Get(HTMXHeaderTarget), - Prompt: ctx.Request().Header.Get(HTMXHeaderPrompt), - } -} diff --git a/htmx/htmx.go b/htmx/htmx.go new file mode 100644 index 0000000..681f521 --- /dev/null +++ b/htmx/htmx.go @@ -0,0 +1,78 @@ +package htmx + +import ( + "net/http" + + "github.com/labstack/echo/v4" +) + +// Headers (https://.org/docs/#requests) +const ( + HeaderRequest = "HX-Request" + HeaderBoosted = "HX-Boosted" + HeaderTrigger = "HX-Trigger" + HeaderTriggerName = "HX-Trigger-Name" + HeaderTriggerAfterSwap = "HX-Trigger-After-Swap" + HeaderTriggerAfterSettle = "HX-Trigger-After-Settle" + HeaderTarget = "HX-Target" + HeaderPrompt = "HX-Prompt" + HeaderPush = "HX-Push" + HeaderRedirect = "HX-Redirect" + HeaderRefresh = "HX-Refresh" +) + +type ( + Request struct { + Enabled bool + Boosted bool + Trigger string + TriggerName string + Target string + Prompt string + } + + Response struct { + Push string + Redirect string + Refresh bool + Trigger string + TriggerAfterSwap string + TriggerAfterSettle string + NoContent bool + } +) + +func GetRequest(ctx echo.Context) Request { + return Request{ + Enabled: ctx.Request().Header.Get(HeaderRequest) == "true", + Boosted: ctx.Request().Header.Get(HeaderBoosted) == "true", + Trigger: ctx.Request().Header.Get(HeaderTrigger), + TriggerName: ctx.Request().Header.Get(HeaderTriggerName), + Target: ctx.Request().Header.Get(HeaderTarget), + Prompt: ctx.Request().Header.Get(HeaderPrompt), + } +} + +func (r *Response) Apply(ctx echo.Context) { + if r.Push != "" { + ctx.Response().Header().Set(HeaderPush, r.Push) + } + if r.Redirect != "" { + ctx.Response().Header().Set(HeaderRedirect, r.Redirect) + } + if r.Refresh { + ctx.Response().Header().Set(HeaderRefresh, "true") + } + if r.Trigger != "" { + ctx.Response().Header().Set(HeaderTrigger, r.Trigger) + } + if r.TriggerAfterSwap != "" { + ctx.Response().Header().Set(HeaderTriggerAfterSwap, r.TriggerAfterSwap) + } + if r.TriggerAfterSettle != "" { + ctx.Response().Header().Set(HeaderTriggerAfterSettle, r.TriggerAfterSettle) + } + if r.NoContent { + ctx.Response().Status = http.StatusNoContent + } +}