func ImagesAdmin() view.View { return view.Views{ UploadImageButton(Config.ImagesAdmin.ThumbnailSize, "function(){window.location.reload()}"), &view.ModelIteratorView{ GetModelIterator: func(ctx *view.Context) model.Iterator { return Config.Backend.ImageIterator() }, GetModelIteratorView: func(ctx *view.Context, m interface{}) (view.View, error) { image := m.(*Image) thumbnail, err := image.Thumbnail(Config.ImagesAdmin.ThumbnailSize) if err != nil { return nil, err } editor := view.DIV(Config.ImagesAdmin.ImageEditorClass, view.H3(image.TitleOrFilename()), view.DIV(Config.ImagesAdmin.ThumbnailFrameClass, thumbnail.ViewImage(""), ), view.HTML("Image URL: "), view.A_blank(image.URL(), image.URL().URL(ctx)), &view.Form{ FormID: "edit" + image.ID.Get(), SubmitButtonClass: Config.ImagesAdmin.ButtonClass, GetModel: func(form *view.Form, ctx *view.Context) (model interface{}, err error) { return &imageData{ Title: image.Title, Filename: image.Versions[0].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: "Are you sure you want to delete the image " + image.TitleOrFilename() + "?", SubmitButtonClass: Config.ImagesAdmin.ButtonClass, FormID: "delete" + image.ID.Get(), OnSubmit: func(form *view.Form, formModel interface{}, ctx *view.Context) (message string, redirect view.URL, err error) { return "", view.StringURL("."), image.Delete() }, }, view.DivClearBoth(), ) return editor, nil }, }, } }
func NewLoginForm(buttonText, class, errorMessageClass, successMessageClass string, redirectURL view.URL) view.View { return view.DynamicView( func(context *view.Context) (v view.View, err error) { if from, ok := context.Params["from"]; ok { redirectURL = view.StringURL(from) } model := &LoginFormModel{} if email, ok := context.Params["email"]; ok { model.Email.Set(email) } form := &view.Form{ Class: class, ErrorMessageClass: errorMessageClass, SuccessMessageClass: successMessageClass, SuccessMessage: "Login successful", SubmitButtonText: buttonText, FormID: "gostart_user_login", GetModel: view.FormModel(model), Redirect: redirectURL, OnSubmit: func(form *view.Form, formModel interface{}, context *view.Context) (string, view.URL, error) { m := formModel.(*LoginFormModel) ok, err := LoginEmailPassword(context, m.Email.Get(), m.Password.Get()) if err != nil { if view.Config.Debug.Mode { return "", nil, err } else { return "", nil, errors.New("An internal error ocoured") } } if !ok { return "", nil, errors.New("Wrong email and password combination") } return "", nil, nil }, } return form, nil }, ) }
func BlobsAdmin() view.View { return view.Views{ UploadBlobButton("", "", "function(){window.location.reload()}"), &view.ModelIteratorView{ GetModelIterator: func(ctx *view.Context) model.Iterator { // debug.Dump(Config.Backend.Blobs.Count()) return Config.Backend.BlobIterator() }, GetModel: func(ctx *view.Context) (interface{}, error) { return new(Blob), nil }, GetModelView: func(ctx *view.Context, m interface{}) (view.View, error) { blob := *m.(*Blob) // copy by value because it will be used in a closure later on refCount, err := blob.CountRefs() if err != nil { return nil, err } deleteConfirmation := fmt.Sprintf("Are you sure you want to delete the blob %s?", blob.Title) if refCount > 0 { deleteConfirmation += fmt.Sprintf(" It is used %d times!", refCount) } editor := view.DIV(Config.Admin.ImageEditorClass, view.H3(blob.Title.Get()), view.P("Link to file: ", view.A_blank(blob.FileURL()) /*, view.Printf(" | Used %d times", refCount)*/), view.P(view.Printf("Size: %d kb", blob.Size.Get()/1024.0)), &view.Form{ FormID: "edit" + blob.ID.Get(), SubmitButtonClass: Config.Admin.ButtonClass, GetModel: func(form *view.Form, ctx *view.Context) (interface{}, error) { return &blobData{ Title: blob.Title, Filename: blob.Filename, Link: blob.Link, }, nil }, OnSubmit: func(form *view.Form, formModel interface{}, ctx *view.Context) (message string, redirect view.URL, err error) { model := formModel.(*blobData) blob.Title = model.Title blob.Filename = model.Filename blob.Link = model.Link err = blob.Save() return "", view.StringURL("."), err }, }, &view.Form{ SubmitButtonText: "Delete", SubmitButtonConfirm: deleteConfirmation, SubmitButtonClass: Config.Admin.ButtonClass, FormID: "delete" + blob.ID.Get(), OnSubmit: func(form *view.Form, formModel interface{}, ctx *view.Context) (message string, redirect view.URL, err error) { _, err = blob.RemoveAllRefs() if err != nil { return "", nil, err } return "", view.StringURL("."), blob.Delete() }, }, view.DivClearBoth(), ) return editor, nil }, }, } }
func ImagesAdmin() view.View { uploader := view.DIV("") uploaderID := uploader.ID() uploader.Content = UploadImageButton("#"+uploaderID, "", "", Config.ImagesAdmin.ThumbnailSize, "function(){window.location.reload()}") return view.Views{ uploader, &view.ModelIteratorView{ GetModelIterator: func(ctx *view.Context) model.Iterator { return Config.Backend.ImageIterator() }, GetModelIteratorView: func(ctx *view.Context, m interface{}) (view.View, error) { image := m.(*Image) refCount, err := image.CountRefs() if err != nil { return nil, err } thumbnail, err := image.Thumbnail(Config.ImagesAdmin.ThumbnailSize) if err != nil { return nil, err } deleteConfirmation := fmt.Sprintf("Are you sure you want to delete the image %s?", image.TitleOrFilename()) if refCount > 0 { deleteConfirmation += fmt.Sprintf(" It is used %d times!", refCount) } editor := view.DIV(Config.ImagesAdmin.ImageEditorClass, view.H3(image.TitleOrFilename()), view.P( view.A_blank(image.GetURL(), "Link to original"), view.Printf(" | Used %d times", refCount), ), view.DIV(Config.ImagesAdmin.ThumbnailFrameClass, thumbnail.View(""), ), &view.Form{ FormID: "edit" + image.ID.Get(), SubmitButtonClass: Config.ImagesAdmin.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.ImagesAdmin.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 }, }, } }
func ImagesAdmin() view.View { return view.Views{ UploadImageButton("", "", Config.Admin.ThumbnailSize, "function(){window.location.reload()}"), view.HR(), &view.Form{ SubmitButtonText: "Delete smaller image versions (they will be regenerated)", SubmitButtonClass: Config.Admin.ButtonClass, FormID: "deleteVersions", OnSubmit: func(form *view.Form, formModel interface{}, ctx *view.Context) (message string, redirect view.URL, err error) { var image Image for i := ImageIterator(); i.Next(&image); { err = image.DeleteVersions() if err != nil { return "", nil, err } err = image.Save() if err != nil { return "", nil, err } } return "", view.StringURL("."), nil }, }, &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.P("Size in MB: ", view.Printf("%f", (float32)(image.Size.Get())/(1024.0*1024.0))), 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 }, }, } }