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