summaryrefslogtreecommitdiff
path: root/editor/editor.go
diff options
context:
space:
mode:
Diffstat (limited to 'editor/editor.go')
-rw-r--r--editor/editor.go41
1 files changed, 41 insertions, 0 deletions
diff --git a/editor/editor.go b/editor/editor.go
new file mode 100644
index 0000000..11dc064
--- /dev/null
+++ b/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 {
+ Editor() *Editor
+ NewViewBuffer()
+ Render() []byte
+}
+
+// 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) {
+ post.NewViewBuffer()
+
+ editor := post.Editor()
+
+ for _, f := range fields {
+ addFieldToEditorView(editor, f)
+ }
+
+ return post.Render(), nil
+}
+
+func addFieldToEditorView(e *Editor, f Field) {
+ e.ViewBuf.Write(f.View)
+}