diff --git a/render/templates/views/site_config_menus.tmpl b/render/templates/views/site_config_menus.tmpl new file mode 100644 index 0000000..b1caeb0 --- /dev/null +++ b/render/templates/views/site_config_menus.tmpl @@ -0,0 +1,95 @@ +{{define "title"}}Editor{{end}} + +{{define "main"}} + +

Create a List

+
+ + + + + + + + + + + + + + + + + + + +
+ +

Header Menu

+ + + + + + + + + + + + + {{range $i, $l := .HeaderMenu}} + + + + + + + + {{end}} + +
TitleListUrlPostActions
{{$l.Title}}{{$l.List}}{{$l.Url}}{{$l.Post}} +
+ + + +
+
+ + +

Footer Menu

+ + + + + + + + + + + + + {{range $i, $l := .FooterMenu}} + + + + + + + + {{end}} + +
TitleListUrlPostActions
{{$l.Title}}{{$l.List}}{{$l.Url}}{{$l.Post}} +
+ + + +
+
+ + +{{end}} \ No newline at end of file diff --git a/web/app.go b/web/app.go index b420b8a..0c12859 100644 --- a/web/app.go +++ b/web/app.go @@ -70,6 +70,11 @@ func NewWebApp( siteConfig.Post("/lists/create/", siteConfigListHandler.HandleCreate) siteConfig.Post("/lists/delete/", siteConfigListHandler.HandleDelete) + siteConfigMenusHandler := NewSiteConfigMenusHandler(siteConfigRepo) + siteConfig.Get("/menus", siteConfigMenusHandler.HandleGet) + siteConfig.Post("/menus/create/", siteConfigMenusHandler.HandleCreate) + siteConfig.Post("/menus/delete/", siteConfigMenusHandler.HandleDelete) + // app.Static("/static/*filepath", http.Dir(repo.StaticDir())) app.Use("/static", filesystem.New(filesystem.Config{ Root: http.FS(embedDirStatic), diff --git a/web/siteconfig_menus_handler.go b/web/siteconfig_menus_handler.go new file mode 100644 index 0000000..0236c9e --- /dev/null +++ b/web/siteconfig_menus_handler.go @@ -0,0 +1,97 @@ +package web + +import ( + "owl-blogs/app/repository" + "owl-blogs/domain/model" + "owl-blogs/render" + "strconv" + + "github.com/gofiber/fiber/v2" +) + +type SiteConfigMenusHandler struct { + siteConfigRepo repository.SiteConfigRepository +} + +type siteConfigMenusTemplateData struct { + HeaderMenu []model.MenuItem + FooterMenu []model.MenuItem +} + +func NewSiteConfigMenusHandler(siteConfigRepo repository.SiteConfigRepository) *SiteConfigMenusHandler { + return &SiteConfigMenusHandler{ + siteConfigRepo: siteConfigRepo, + } +} + +func (h *SiteConfigMenusHandler) HandleGet(c *fiber.Ctx) error { + c.Set(fiber.HeaderContentType, fiber.MIMETextHTML) + + config, err := h.siteConfigRepo.Get() + if err != nil { + return err + } + + return render.RenderTemplateWithBase( + c, getConfig(h.siteConfigRepo), "views/site_config_menus", siteConfigMenusTemplateData{ + HeaderMenu: config.HeaderMenu, + FooterMenu: config.FooterMenu, + }) +} + +func (h *SiteConfigMenusHandler) HandleCreate(c *fiber.Ctx) error { + c.Set(fiber.HeaderContentType, fiber.MIMETextHTML) + + config, err := h.siteConfigRepo.Get() + if err != nil { + return err + } + + menuItem := model.MenuItem{ + Title: c.FormValue("Title"), + List: c.FormValue("List"), + Url: c.FormValue("Url"), + Post: c.FormValue("Post"), + } + + if c.FormValue("menu") == "header" { + config.HeaderMenu = append(config.HeaderMenu, menuItem) + } else if c.FormValue("menu") == "footer" { + config.FooterMenu = append(config.FooterMenu, menuItem) + } + + err = h.siteConfigRepo.Update(config) + if err != nil { + return err + } + + return c.Redirect("/site-config/menus") +} + +func (h *SiteConfigMenusHandler) HandleDelete(c *fiber.Ctx) error { + c.Set(fiber.HeaderContentType, fiber.MIMETextHTML) + + config, err := h.siteConfigRepo.Get() + if err != nil { + return err + } + + menu := c.FormValue("menu") + idx, err := strconv.Atoi(c.FormValue("idx")) + if err != nil { + return err + } + + if menu == "header" { + config.HeaderMenu = append(config.HeaderMenu[:idx], config.HeaderMenu[idx+1:]...) + } else if menu == "footer" { + config.FooterMenu = append(config.FooterMenu[:idx], config.FooterMenu[idx+1:]...) + } + + err = h.siteConfigRepo.Update(config) + if err != nil { + return err + } + + return c.Redirect("/site-config/menus") +}