This commit is contained in:
Niko Abeler 2023-07-18 20:09:45 +02:00
parent 5f897cb677
commit abbbbb4402
3 changed files with 197 additions and 0 deletions

View File

@ -0,0 +1,95 @@
{{define "title"}}Editor{{end}}
{{define "main"}}
<h2>Create a List</h2>
<form action="/site-config/menus/create" method="post" enctype="multipart/form-data">
<select name="menu" id="menu">
<option value="header">Header</option>
<option value="footer">Footer</option>
</select>
<label for="Title">Title</label>
<input type="text" name="Title" id="Title"/>
<label for="Url">Url</label>
<input type="text" name="Url" id="Url"/>
<label for="List">List</label>
<input type="text" name="List" id="List"/>
<label for="Post">Post</label>
<input type="text" name="Post" id="Post"/>
<label for="ListType">ListType</label>
<input type="text" name="ListType" id="ListType"/>
<input type="submit" value="Create" />
</form>
<h2>Header Menu</h2>
<table>
<thead>
<tr>
<th>Title</th>
<th>List</th>
<th>Url</th>
<th>Post</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{{range $i, $l := .HeaderMenu}}
<tr>
<td>{{$l.Title}}</td>
<td>{{$l.List}}</td>
<td>{{$l.Url}}</td>
<td>{{$l.Post}}</td>
<td>
<form action="/site-config/menus/delete" method="post" enctype="multipart/form-data">
<input type="hidden" name="idx" value="{{$i}}"/>
<input type="hidden" name="menu" value="header"/>
<input type="submit" value="Delete" />
</form>
</td>
</tr>
{{end}}
</tbody>
</table>
<h2>Footer Menu</h2>
<table>
<thead>
<tr>
<th>Title</th>
<th>List</th>
<th>Url</th>
<th>Post</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{{range $i, $l := .FooterMenu}}
<tr>
<td>{{$l.Title}}</td>
<td>{{$l.List}}</td>
<td>{{$l.Url}}</td>
<td>{{$l.Post}}</td>
<td>
<form action="/site-config/menus/delete" method="post" enctype="multipart/form-data">
<input type="hidden" name="idx" value="{{$i}}"/>
<input type="hidden" name="menu" value="footer"/>
<input type="submit" value="Delete" />
</form>
</td>
</tr>
{{end}}
</tbody>
</table>
{{end}}

View File

@ -70,6 +70,11 @@ func NewWebApp(
siteConfig.Post("/lists/create/", siteConfigListHandler.HandleCreate) siteConfig.Post("/lists/create/", siteConfigListHandler.HandleCreate)
siteConfig.Post("/lists/delete/", siteConfigListHandler.HandleDelete) 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.Static("/static/*filepath", http.Dir(repo.StaticDir()))
app.Use("/static", filesystem.New(filesystem.Config{ app.Use("/static", filesystem.New(filesystem.Config{
Root: http.FS(embedDirStatic), Root: http.FS(embedDirStatic),

View File

@ -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")
}