summaryrefslogtreecommitdiff
path: root/management/editor/editor.go
diff options
context:
space:
mode:
Diffstat (limited to 'management/editor/editor.go')
-rw-r--r--management/editor/editor.go41
1 files changed, 41 insertions, 0 deletions
diff --git a/management/editor/editor.go b/management/editor/editor.go
new file mode 100644
index 0000000..24b514e
--- /dev/null
+++ b/management/editor/editor.go
@@ -0,0 +1,41 @@
+// 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 {
+ ContentID() int
+ 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
+}
+
+// New takes editable content and any number of Field funcs to describe the edit
+// page for any content struct added by a user
+func New(post Editable, fields ...Field) ([]byte, error) {
+ editor := post.Editor()
+
+ editor.ViewBuf = &bytes.Buffer{}
+
+ for _, f := range fields {
+ addFieldToEditorView(editor, f)
+ }
+
+ return editor.ViewBuf.Bytes(), nil
+}
+
+func addFieldToEditorView(e *Editor, f Field) {
+ e.ViewBuf.Write(f.View)
+}