50 lines
1.0 KiB
Go
50 lines
1.0 KiB
Go
package html_components
|
|
|
|
import (
|
|
"fmt"
|
|
. "github.com/labstack/echo/v4"
|
|
"net/url"
|
|
"strconv"
|
|
)
|
|
|
|
const HeaderHxCurrentUrl = "Hx-Current-Url"
|
|
|
|
func getCurrentUrlHeader(c Context) string {
|
|
return c.Request().Header.Get(HeaderHxCurrentUrl)
|
|
}
|
|
|
|
const HeaderFromTable = "From-Table"
|
|
|
|
func HasFromTableHeader(c Context) bool {
|
|
parsed, err := strconv.ParseBool(c.Request().Header.Get(HeaderFromTable))
|
|
return err == nil && parsed
|
|
}
|
|
|
|
func checkForValidUrl(stringUrl string) string {
|
|
_, err := url.Parse(stringUrl)
|
|
if err != nil {
|
|
return "/" // safe fallback
|
|
}
|
|
return stringUrl
|
|
}
|
|
|
|
func GetCurrentUrl(c Context, defaultPath string) string {
|
|
currentUrlHeader := getCurrentUrlHeader(c)
|
|
if currentUrlHeader == "" {
|
|
return checkForValidUrl(defaultPath)
|
|
}
|
|
return currentUrlHeader
|
|
}
|
|
|
|
func GetCurrentUrlQueryParams(c Context) string {
|
|
currentUrlHeader := getCurrentUrlHeader(c)
|
|
if currentUrlHeader == "" {
|
|
return ""
|
|
}
|
|
currentUrl, err := url.Parse(currentUrlHeader)
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
return fmt.Sprint("?", currentUrl.Query().Encode())
|
|
}
|