forked from ungerik/go-start
/
imagesadmin.go
90 lines (86 loc) · 2.77 KB
/
imagesadmin.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package media
import (
"fmt"
// "github.com/ungerik/go-start/debug"
"github.com/ungerik/go-start/model"
"github.com/ungerik/go-start/view"
)
type imageData struct {
Title model.String
Filename model.String
Link model.Url
}
func ImagesAdmin() view.View {
return view.Views{
UploadImageButton("", "", Config.Admin.ThumbnailSize, "function(){window.location.reload()}"),
&view.ModelIteratorView{
GetModelIterator: func(ctx *view.Context) model.Iterator {
return Config.Backend.ImageIterator()
},
GetModel: func(ctx *view.Context) (interface{}, error) {
return new(Image), nil
},
GetModelView: func(ctx *view.Context, m interface{}) (view.View, error) {
image := *m.(*Image) // copy by value because it will be used in a closure later on
refCount, err := image.CountRefs()
if err != nil {
return nil, err
}
thumbnail, err := image.Thumbnail(Config.Admin.ThumbnailSize)
if err != nil {
return nil, err
}
deleteConfirmation := fmt.Sprintf("Are you sure you want to delete the image %s?", image.Title)
if refCount > 0 {
deleteConfirmation += fmt.Sprintf(" It is used %d times!", refCount)
}
editor := view.DIV(Config.Admin.ImageEditorClass,
view.H3(image.Title.Get()),
view.P(
view.A_blank(image.FileURL(), "Link to original"),
view.Printf(" | Used %d times", refCount),
),
view.DIV(Config.Admin.ThumbnailFrameClass,
thumbnail.View(""),
),
&view.Form{
FormID: "edit" + image.ID.Get(),
SubmitButtonClass: Config.Admin.ButtonClass,
GetModel: func(form *view.Form, ctx *view.Context) (interface{}, error) {
return &imageData{
Title: image.Title,
Filename: model.String(image.Filename()),
Link: image.Link,
}, nil
},
OnSubmit: func(form *view.Form, formModel interface{}, ctx *view.Context) (message string, redirect view.URL, err error) {
model := formModel.(*imageData)
image.Title = model.Title
image.Link = model.Link
for i := range image.Versions {
image.Versions[i].Filename = model.Filename
}
err = image.Save()
return "", view.StringURL("."), err
},
},
&view.Form{
SubmitButtonText: "Delete",
SubmitButtonConfirm: deleteConfirmation,
SubmitButtonClass: Config.Admin.ButtonClass,
FormID: "delete" + image.ID.Get(),
OnSubmit: func(form *view.Form, formModel interface{}, ctx *view.Context) (message string, redirect view.URL, err error) {
_, err = image.RemoveAllRefs()
if err != nil {
return "", nil, err
}
return "", view.StringURL("."), image.Delete()
},
},
view.DivClearBoth(),
)
return editor, nil
},
},
}
}