From 349aa0dd5de014dc05ca958c5d666393aec991b6 Mon Sep 17 00:00:00 2001 From: Niko Abeler Date: Sat, 5 Aug 2023 13:35:56 +0200 Subject: [PATCH] draft list --- render/templates/views/admin.tmpl | 3 +- render/templates/views/admin_config.tmpl | 2 +- render/templates/views/binary_manager.tmpl | 2 +- render/templates/views/draft_list.tmpl | 44 ++++++++++ render/templates/views/editor.tmpl | 2 +- render/templates/views/site_config.tmpl | 2 +- render/templates/views/site_config_list.tmpl | 2 +- render/templates/views/site_config_me.tmpl | 2 +- render/templates/views/site_config_menus.tmpl | 2 +- web/app.go | 2 + web/draft_handler.go | 88 +++++++++++++++++++ 11 files changed, 143 insertions(+), 8 deletions(-) create mode 100644 render/templates/views/draft_list.tmpl create mode 100644 web/draft_handler.go diff --git a/render/templates/views/admin.tmpl b/render/templates/views/admin.tmpl index 7a59a89..35c2d4c 100644 --- a/render/templates/views/admin.tmpl +++ b/render/templates/views/admin.tmpl @@ -9,9 +9,10 @@ {{end}} -

Files

+

Content

Configurations

diff --git a/render/templates/views/admin_config.tmpl b/render/templates/views/admin_config.tmpl index a21bcf6..ab91f6f 100644 --- a/render/templates/views/admin_config.tmpl +++ b/render/templates/views/admin_config.tmpl @@ -2,7 +2,7 @@ {{define "main"}} -Back +← Back

diff --git a/render/templates/views/binary_manager.tmpl b/render/templates/views/binary_manager.tmpl index 24abd96..6016d7b 100644 --- a/render/templates/views/binary_manager.tmpl +++ b/render/templates/views/binary_manager.tmpl @@ -2,7 +2,7 @@ {{define "main"}} -Back +← Back

diff --git a/render/templates/views/draft_list.tmpl b/render/templates/views/draft_list.tmpl new file mode 100644 index 0000000..c87e7c3 --- /dev/null +++ b/render/templates/views/draft_list.tmpl @@ -0,0 +1,44 @@ +{{define "title"}}Index{{end}} + +{{define "main"}} + +← Back +
+
+ +
+{{ range .Entries }} +
+
+

+ + {{if .Title}} + {{ .Title }} + {{else}} + # + {{end}} + +

+
+
+
+{{ end }} +
+ +
+ +{{end}} \ No newline at end of file diff --git a/render/templates/views/editor.tmpl b/render/templates/views/editor.tmpl index 5ce63bd..78948ca 100644 --- a/render/templates/views/editor.tmpl +++ b/render/templates/views/editor.tmpl @@ -2,7 +2,7 @@ {{define "main"}} -Back +← Back

diff --git a/render/templates/views/site_config.tmpl b/render/templates/views/site_config.tmpl index 61350e3..f477ece 100644 --- a/render/templates/views/site_config.tmpl +++ b/render/templates/views/site_config.tmpl @@ -2,7 +2,7 @@ {{define "main"}} -Back +← Back

Site Settings

diff --git a/render/templates/views/site_config_list.tmpl b/render/templates/views/site_config_list.tmpl index f24a725..e06f232 100644 --- a/render/templates/views/site_config_list.tmpl +++ b/render/templates/views/site_config_list.tmpl @@ -2,7 +2,7 @@ {{define "main"}} -Back +← Back

Create a List

diff --git a/render/templates/views/site_config_me.tmpl b/render/templates/views/site_config_me.tmpl index b7289ad..d5f1785 100644 --- a/render/templates/views/site_config_me.tmpl +++ b/render/templates/views/site_config_me.tmpl @@ -2,7 +2,7 @@ {{define "main"}} -Back +← Back

Create a Me Link

diff --git a/render/templates/views/site_config_menus.tmpl b/render/templates/views/site_config_menus.tmpl index 30d41d5..2969a6c 100644 --- a/render/templates/views/site_config_menus.tmpl +++ b/render/templates/views/site_config_menus.tmpl @@ -2,7 +2,7 @@ {{define "main"}} -Back +← Back

Create a List

diff --git a/web/app.go b/web/app.go index f70b6d0..debcfb5 100644 --- a/web/app.go +++ b/web/app.go @@ -52,10 +52,12 @@ func NewWebApp( // admin adminHandler := NewAdminHandler(configRepo, configRegister, typeRegistry) + draftHandler := NewDraftHandler(entryService, configRepo) binaryManageHandler := NewBinaryManageHandler(configRepo, binService) admin := app.Group("/admin") admin.Use(middleware.NewAuthMiddleware(authorService).Handle) admin.Get("/", adminHandler.Handle) + admin.Get("/drafts/", draftHandler.Handle) admin.Get("/config/:config/", adminHandler.HandleConfigGet) admin.Post("/config/:config/", adminHandler.HandleConfigPost) admin.Get("/binaries/", binaryManageHandler.Handle) diff --git a/web/draft_handler.go b/web/draft_handler.go new file mode 100644 index 0000000..448cfb0 --- /dev/null +++ b/web/draft_handler.go @@ -0,0 +1,88 @@ +package web + +import ( + "owl-blogs/app" + "owl-blogs/app/repository" + "owl-blogs/domain/model" + "owl-blogs/render" + "sort" + "strconv" + + "github.com/gofiber/fiber/v2" +) + +type DraftHandler struct { + configRepo repository.ConfigRepository + entrySvc *app.EntryService +} + +func NewDraftHandler( + entryService *app.EntryService, + configRepo repository.ConfigRepository, +) *DraftHandler { + return &DraftHandler{ + entrySvc: entryService, + configRepo: configRepo, + } +} + +type DraftRenderData struct { + Entries []model.Entry + Page int + NextPage int + PrevPage int + FirstPage bool + LastPage bool +} + +func (h *DraftHandler) Handle(c *fiber.Ctx) error { + c.Set(fiber.HeaderContentType, fiber.MIMETextHTML) + + siteConfig := getSiteConfig(h.configRepo) + + entries, err := h.entrySvc.FindAllByType(&siteConfig.PrimaryListInclude, false, true) + if err != nil { + return err + } + + // sort entries by date descending + sort.Slice(entries, func(i, j int) bool { + return entries[i].Title() < entries[j].Title() + }) + + // pagination + page := c.Query("page") + if page == "" { + page = "1" + } + pageNum, err := strconv.Atoi(page) + if err != nil { + pageNum = 1 + } + limit := 10 + offset := (pageNum - 1) * limit + lastPage := false + if offset > len(entries) { + offset = len(entries) + lastPage = true + } + if offset+limit > len(entries) { + limit = len(entries) - offset + lastPage = true + } + entries = entries[offset : offset+limit] + + if err != nil { + return err + } + + return render.RenderTemplateWithBase(c, siteConfig, "views/draft_list", DraftRenderData{ + Entries: entries, + Page: pageNum, + NextPage: pageNum + 1, + PrevPage: pageNum - 1, + FirstPage: pageNum == 1, + LastPage: lastPage, + }) + +}