From 1742728639e252906088972282ff768b4fb9176d Mon Sep 17 00:00:00 2001 From: Niko Abeler Date: Sun, 25 Jun 2023 22:09:27 +0200 Subject: [PATCH] experiments for editor --- domain/model/image_entry.go | 2 +- web/editor/entry_form.go | 49 +++++++++++++++++++++++++++++++++++++ web/editor_handler.go | 5 +++- 3 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 web/editor/entry_form.go diff --git a/domain/model/image_entry.go b/domain/model/image_entry.go index a60ea0c..2d1f848 100644 --- a/domain/model/image_entry.go +++ b/domain/model/image_entry.go @@ -10,7 +10,7 @@ type ImageEntry struct { } type ImageEntryMetaData struct { - ImagePath string + ImagePath string `owl:"type=upload"` } func (e *ImageEntry) ID() string { diff --git a/web/editor/entry_form.go b/web/editor/entry_form.go new file mode 100644 index 0000000..188693c --- /dev/null +++ b/web/editor/entry_form.go @@ -0,0 +1,49 @@ +package editor + +import ( + "fmt" + "owl-blogs/domain/model" + "reflect" + "strings" +) + +type EditorEntryForm struct { + entry model.Entry +} + +type EntryFormField struct { + Name string + Params map[string]string +} + +func NewEditorFormService(entry model.Entry) *EditorEntryForm { + return &EditorEntryForm{ + entry: entry, + } +} + +func (s *EditorEntryForm) HtmlForm() string { + meta := s.entry.MetaData() + entryType := reflect.TypeOf(meta).Elem() + numFields := entryType.NumField() + + fields := []EntryFormField{} + for i := 0; i < numFields; i++ { + field := EntryFormField{ + Name: entryType.Field(i).Name, + Params: map[string]string{}, + } + tag := entryType.Field(i).Tag.Get("owl") + for _, param := range strings.Split(tag, " ") { + parts := strings.Split(param, "=") + if len(parts) == 2 { + field.Params[parts[0]] = parts[1] + } else { + field.Params[param] = "" + } + } + fields = append(fields, field) + } + + return fmt.Sprintf("%v", fields) +} diff --git a/web/editor_handler.go b/web/editor_handler.go index 25a5e81..357d69b 100644 --- a/web/editor_handler.go +++ b/web/editor_handler.go @@ -2,6 +2,8 @@ package web import ( "owl-blogs/app" + "owl-blogs/domain/model" + "owl-blogs/web/editor" "github.com/gofiber/fiber/v2" ) @@ -15,7 +17,8 @@ func NewEditorHandler(entryService *app.EntryService) *EditorHandler { } func (h *EditorHandler) HandleGet(c *fiber.Ctx) error { - return c.SendString("Hello, Editor!") + form := editor.NewEditorFormService(&model.ImageEntry{}) + return c.SendString(form.HtmlForm()) } func (h *EditorHandler) HandlePost(c *fiber.Ctx) error {