// Package editor enables users to create edit views from their content // structs so that admins can manage content package editor import ( "bytes" ) // Editable ensures data is editable type Editable interface { SetContentID(id int) ContentID() int ContentName() string SetSlug(slug string) Editor() *Editor MarshalEditor() ([]byte, error) } // Editor is a view containing fields to manage content type Editor struct { ViewBuf *bytes.Buffer } // Field is used to create the editable view for a field // within a particular content struct type Field struct { View []byte } // Form takes editable content and any number of Field funcs to describe the edit // page for any content struct added by a user func Form(post Editable, fields ...Field) ([]byte, error) { editor := post.Editor() editor.ViewBuf = &bytes.Buffer{} editor.ViewBuf.Write([]byte(`
`)) for _, f := range fields { addFieldToEditorView(editor, f) } editor.ViewBuf.Write([]byte(` |
`))
addPostDefaultFieldsToEditorView(post, editor)
submit := `
|