more custom forms
This commit is contained in:
parent
fcc0132758
commit
eee2131a76
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue