From eee2131a76f29bc88e4161d4fe8310ac177266c8 Mon Sep 17 00:00:00 2001 From: Niko Abeler Date: Wed, 14 Feb 2024 20:43:43 +0100 Subject: [PATCH] more custom forms --- entry_types/bookmark.go | 18 ++++++++++-- entry_types/image.go | 41 ++++++++++++++++++++++++++-- render/templates/forms/Bookmark.tmpl | 10 +++++++ render/templates/forms/Image.tmpl | 10 +++++++ tmp/build-errors.log | 1 - web/forms/form_test.go | 4 +-- 6 files changed, 75 insertions(+), 9 deletions(-) create mode 100644 render/templates/forms/Bookmark.tmpl create mode 100644 render/templates/forms/Image.tmpl delete mode 100644 tmp/build-errors.log diff --git a/entry_types/bookmark.go b/entry_types/bookmark.go index 45b6aab..e5ca2d8 100644 --- a/entry_types/bookmark.go +++ b/entry_types/bookmark.go @@ -4,7 +4,6 @@ import ( "fmt" "owl-blogs/domain/model" "owl-blogs/render" - "owl-blogs/web/forms" ) type Bookmark struct { @@ -13,13 +12,26 @@ type Bookmark struct { } type BookmarkMetaData struct { - forms.DefaultForm - Title string `owl:"inputType=text"` Url string `owl:"inputType=text"` Content string `owl:"inputType=text widget=textarea"` } +// Form implements model.EntryMetaData. +func (meta *BookmarkMetaData) Form(binSvc model.BinaryStorageInterface) string { + f, _ := render.RenderTemplateToString("forms/Bookmark", meta) + return f +} + +// ParseFormData implements model.EntryMetaData. +func (*BookmarkMetaData) ParseFormData(data model.HttpFormData, binSvc model.BinaryStorageInterface) (model.EntryMetaData, error) { + return &BookmarkMetaData{ + Title: data.FormValue("title"), + Url: data.FormValue("url"), + Content: data.FormValue("content"), + }, nil +} + func (e *Bookmark) Title() string { return e.meta.Title } diff --git a/entry_types/image.go b/entry_types/image.go index 5bdf251..7d7b0aa 100644 --- a/entry_types/image.go +++ b/entry_types/image.go @@ -4,7 +4,6 @@ import ( "fmt" "owl-blogs/domain/model" "owl-blogs/render" - "owl-blogs/web/forms" ) type Image struct { @@ -13,13 +12,49 @@ type Image struct { } type ImageMetaData struct { - forms.DefaultForm - ImageId string `owl:"inputType=file"` Title string `owl:"inputType=text"` Content string `owl:"inputType=text widget=textarea"` } +// Form implements model.EntryMetaData. +func (meta *ImageMetaData) Form(binSvc model.BinaryStorageInterface) string { + f, _ := render.RenderTemplateToString("forms/Image", meta) + return f +} + +// ParseFormData implements model.EntryMetaData. +func (meta *ImageMetaData) ParseFormData(data model.HttpFormData, binSvc model.BinaryStorageInterface) (model.EntryMetaData, error) { + file, err := data.FormFile("image") + var imgId = meta.ImageId + if err != nil && imgId == "" { + return nil, err + } else if err == nil { + fileData, err := file.Open() + if err != nil { + return nil, err + } + defer fileData.Close() + + fileBytes := make([]byte, file.Size) + _, err = fileData.Read(fileBytes) + if err != nil { + return nil, err + } + bin, err := binSvc.Create(file.Filename, fileBytes) + if err != nil { + return nil, err + } + imgId = bin.Id + } + + return &ImageMetaData{ + ImageId: imgId, + Title: data.FormValue("title"), + Content: data.FormValue("content"), + }, nil +} + func (e *Image) Title() string { return e.meta.Title } diff --git a/render/templates/forms/Bookmark.tmpl b/render/templates/forms/Bookmark.tmpl new file mode 100644 index 0000000..e482759 --- /dev/null +++ b/render/templates/forms/Bookmark.tmpl @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/render/templates/forms/Image.tmpl b/render/templates/forms/Image.tmpl new file mode 100644 index 0000000..1c78f6c --- /dev/null +++ b/render/templates/forms/Image.tmpl @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/tmp/build-errors.log b/tmp/build-errors.log deleted file mode 100644 index 9ba0172..0000000 --- a/tmp/build-errors.log +++ /dev/null @@ -1 +0,0 @@ -exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1 \ No newline at end of file diff --git a/web/forms/form_test.go b/web/forms/form_test.go index bd1bb56..eb011ce 100644 --- a/web/forms/form_test.go +++ b/web/forms/form_test.go @@ -103,6 +103,6 @@ func TestFormParse(t *testing.T) { form := forms.NewForm(&MockData{}, binService) data, err := form.Parse(NewMockFormData()) require.NoError(t, err) - require.NotZero(t, data.(*MockData).Image) - require.Equal(t, "Content", data.(*MockData).Content) + require.NotZero(t, data.Image) + require.Equal(t, "Content", data.Content) }