Better Editor Forms #56

Merged
h4kor merged 6 commits from better_forms into main 2024-02-21 19:05:08 +00:00
6 changed files with 75 additions and 9 deletions
Showing only changes of commit eee2131a76 - Show all commits

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