* fix: theme flickering * chore(ui): added dark mode tests * feat(ui): Expose new ui.dark-mode parameter to set default theme * refactor(ui): Rename theme variable to themeFromCookie for clarity --------- Co-authored-by: TwiN <twin@linux.com> Co-authored-by: TwiN <chris@twin.sh>
42 lines
1.6 KiB
Go
42 lines
1.6 KiB
Go
package api
|
|
|
|
import (
|
|
_ "embed"
|
|
"html/template"
|
|
|
|
"github.com/TwiN/gatus/v5/config/ui"
|
|
static "github.com/TwiN/gatus/v5/web"
|
|
"github.com/TwiN/logr"
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
func SinglePageApplication(uiConfig *ui.Config) fiber.Handler {
|
|
return func(c *fiber.Ctx) error {
|
|
vd := ui.ViewData{UI: uiConfig}
|
|
{
|
|
themeFromCookie := string(c.Request().Header.Cookie("theme"))
|
|
if len(themeFromCookie) > 0 {
|
|
if themeFromCookie == "dark" {
|
|
vd.Theme = "dark"
|
|
}
|
|
} else if uiConfig.IsDarkMode() { // Since there's no theme cookie, we'll rely on ui.DarkMode
|
|
vd.Theme = "dark"
|
|
}
|
|
}
|
|
t, err := template.ParseFS(static.FileSystem, static.IndexPath)
|
|
if err != nil {
|
|
// This should never happen, because ui.ValidateAndSetDefaults validates that the template works.
|
|
logr.Errorf("[api.SinglePageApplication] Failed to parse template. This should never happen, because the template is validated on start. Error: %s", err.Error())
|
|
return c.Status(500).SendString("Failed to parse template. This should never happen, because the template is validated on start.")
|
|
}
|
|
c.Set("Content-Type", "text/html")
|
|
err = t.Execute(c, vd)
|
|
if err != nil {
|
|
// This should never happen, because ui.ValidateAndSetDefaults validates that the template works.
|
|
logr.Errorf("[api.SinglePageApplication] Failed to execute template. This should never happen, because the template is validated on start. Error: %s", err.Error())
|
|
return c.Status(500).SendString("Failed to parse template. This should never happen, because the template is validated on start.")
|
|
}
|
|
return c.SendStatus(200)
|
|
}
|
|
}
|