summaryrefslogtreecommitdiff
path: root/system/item
diff options
context:
space:
mode:
authorSteve Manuel <nilslice@gmail.com>2017-04-25 13:23:37 -0700
committerSteve Manuel <nilslice@gmail.com>2017-04-25 13:23:37 -0700
commit099d000119447708d7d0d0482758d352438fa7e5 (patch)
treef4386ae2ff25a5b6b15c2e6442d4c56705e8271e /system/item
parent7092fb8979869f3c09b364d454d8d8081bb7c0bc (diff)
adding support for file upload type and API handler to fetch file info
Diffstat (limited to 'system/item')
-rw-r--r--system/item/file.go96
1 files changed, 96 insertions, 0 deletions
diff --git a/system/item/file.go b/system/item/file.go
new file mode 100644
index 0000000..3b33b04
--- /dev/null
+++ b/system/item/file.go
@@ -0,0 +1,96 @@
+package item
+
+import (
+ "fmt"
+
+ "github.com/ponzu-cms/ponzu/management/editor"
+)
+
+// FileUpload represents the file uploaded to the system
+type FileUpload struct {
+ Item
+
+ Name string `json:"name"`
+ Path string `json:"path"`
+ ContentLength int64 `json:"content_length"`
+ ContentType string `json:"content_type"`
+}
+
+// String partially implements item.Identifiable and overrides Item's String()
+func (f *FileUpload) String() string { return f.Name }
+
+// MarshalEditor writes a buffer of html to edit a Post and partially implements editor.Editable
+func (f *FileUpload) MarshalEditor() ([]byte, error) {
+ view, err := editor.Form(f,
+ editor.Field{
+ View: []byte(`
+ <div class="input-field col s12">
+ <label class="active">{{ .Name }}</label>
+ <!-- Add your custom editor field view here. -->
+ <h4>` + f.Name + `</h4>
+
+ <img class="preview" src="` + f.Path + `"/>
+ <p>File information:</p>
+ <ul>
+ <li>Content-Length: ` + fmt.Sprintf("%d", f.ContentLength) + `</li>
+ <li>Content-Type: ` + f.ContentType + `</li>
+ </ul>
+ </div>
+ `),
+ },
+ )
+ if err != nil {
+ return nil, err
+ }
+
+ open := []byte(`
+ <div class="card">
+ <div class="card-content">
+ <div class="card-title">File Uploads</div>
+ </div>
+ <form action="/admin/uploads" method="post">
+ `)
+ close := []byte(`</form></div>`)
+ script := []byte(`
+ <script>
+ $(function() {
+ // hide default fields & labels unnecessary for the config
+ var fields = $('.default-fields');
+ fields.css('position', 'relative');
+ fields.find('input:not([type=submit])').remove();
+ fields.find('label').remove();
+ fields.find('button').css({
+ position: 'absolute',
+ top: '-10px',
+ right: '0px'
+ });
+
+ var contentOnly = $('.content-only.__ponzu');
+ contentOnly.hide();
+ contentOnly.find('input, textarea, select').attr('name', '');
+
+ // adjust layout of td so save button is in same location as usual
+ fields.find('td').css('float', 'right');
+
+ // stop some fixed config settings from being modified
+ fields.find('input[name=client_secret]').attr('name', '');
+
+ // hide save, show delete
+ fields.find('.save-post').hide();
+ fields.find('.delete-post').show();
+ });
+ </script>
+ `)
+
+ view = append(open, view...)
+ view = append(view, close...)
+ view = append(view, script...)
+
+ return view, nil
+}
+
+func (f *FileUpload) Push() []string {
+ return []string{
+ "path",
+ }
+}