more custom forms

This commit is contained in:
Niko Abeler 2024-02-14 20:43:43 +01:00
parent fcc0132758
commit eee2131a76
6 changed files with 75 additions and 9 deletions

View File

@ -4,7 +4,6 @@ import (
"fmt" "fmt"
"owl-blogs/domain/model" "owl-blogs/domain/model"
"owl-blogs/render" "owl-blogs/render"
"owl-blogs/web/forms"
) )
type Bookmark struct { type Bookmark struct {
@ -13,13 +12,26 @@ type Bookmark struct {
} }
type BookmarkMetaData struct { type BookmarkMetaData struct {
forms.DefaultForm
Title string `owl:"inputType=text"` Title string `owl:"inputType=text"`
Url string `owl:"inputType=text"` Url string `owl:"inputType=text"`
Content string `owl:"inputType=text widget=textarea"` 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 { func (e *Bookmark) Title() string {
return e.meta.Title return e.meta.Title
} }

View File

@ -4,7 +4,6 @@ import (
"fmt" "fmt"
"owl-blogs/domain/model" "owl-blogs/domain/model"
"owl-blogs/render" "owl-blogs/render"
"owl-blogs/web/forms"
) )
type Image struct { type Image struct {
@ -13,13 +12,49 @@ type Image struct {
} }
type ImageMetaData struct { type ImageMetaData struct {
forms.DefaultForm
ImageId string `owl:"inputType=file"` ImageId string `owl:"inputType=file"`
Title string `owl:"inputType=text"` Title string `owl:"inputType=text"`
Content string `owl:"inputType=text widget=textarea"` 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 { func (e *Image) Title() string {
return e.meta.Title return e.meta.Title
} }

View File

@ -0,0 +1,10 @@
<label for="title">Title</label>
<input type="text" name="title" value="{{.Title}}" />
<label for="url">URL</label>
<input type="text" name="url" value="{{.Url}}" placeholder="https://..." />
<label for="content">Content</label>
<textarea name="content" rows="16">
{{.Content}}
</textarea>

View File

@ -0,0 +1,10 @@
<label for="image">Image</label>
<input type="file" name="image" />
<label for="title">Title</label>
<input type="text" name="title" value="{{.Title}}" />
<label for="content">Content</label>
<textarea name="content" rows="16">
{{.Content}}
</textarea>

View File

@ -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

View File

@ -103,6 +103,6 @@ func TestFormParse(t *testing.T) {
form := forms.NewForm(&MockData{}, binService) form := forms.NewForm(&MockData{}, binService)
data, err := form.Parse(NewMockFormData()) data, err := form.Parse(NewMockFormData())
require.NoError(t, err) require.NoError(t, err)
require.NotZero(t, data.(*MockData).Image) require.NotZero(t, data.Image)
require.Equal(t, "Content", data.(*MockData).Content) require.Equal(t, "Content", data.Content)
} }