summaryrefslogtreecommitdiff
path: root/management
diff options
context:
space:
mode:
Diffstat (limited to 'management')
-rw-r--r--management/editor/elements.go44
-rw-r--r--management/manager/manager.go6
2 files changed, 37 insertions, 13 deletions
diff --git a/management/editor/elements.go b/management/editor/elements.go
index 53f7146..418ee2e 100644
--- a/management/editor/elements.go
+++ b/management/editor/elements.go
@@ -3,6 +3,7 @@ package editor
import (
"bytes"
"fmt"
+ "html"
"reflect"
"strings"
)
@@ -68,7 +69,7 @@ func Richtext(fieldName string, p interface{}, attrs map[string]string) []byte {
// create a hidden input to store the value from the struct
val := valueFromStructField(fieldName, p).String()
name := tagNameFromStructField(fieldName, p)
- input := `<input type="hidden" name="` + name + `" class="richtext-value ` + fieldName + `" value="` + val + `"/>`
+ input := `<input type="hidden" name="` + name + `" class="richtext-value ` + fieldName + `" value="` + html.EscapeString(val) + `"/>`
// build the dom tree for the entire richtext component
iso = append(iso, domElement(div)...)
@@ -93,26 +94,49 @@ func Richtext(fieldName string, p interface{}, attrs map[string]string) []byte {
['para', ['ul', 'ol', 'paragraph']],
['height', ['height']],
['misc', ['codeview']]
- ]
+ ],
+ // intercept file insertion, upload and insert img with new src
+ onImageUpload: function(files) {
+ var data = new FormData();
+ data.append("file", files[0]);
+ $.ajax({
+ data: data,
+ type: 'POST',
+ url: '/admin/edit/upload',
+ cache: false,
+ contentType: false,
+ processData: false,
+ success: function(resp) {
+ console.log(resp);
+ var img = document.createElement('img');
+ img.setAttribute('src', resp.data[0].url);
+ console.log(img);
+ _editor.materialnote('insertNode', img);
+ },
+ error: function(xhr, status, err) {
+ console.log(status, err);
+ }
+ })
+
+ }
});
// inject content into editor
if (hidden.val() !== "") {
- console.log('content injected');
- _editor.code(Base64.decode(hidden.val()));
+ _editor.code(hidden.val());
}
// update hidden input with encoded value on different events
_editor.on('materialnote.change', function(e, content, $editable) {
- console.log('content changed');
- hidden.val(Base64.encode(replaceBadChars(content)));
+ hidden.val(replaceBadChars(content));
});
_editor.on('materialnote.paste', function(e) {
- console.log('content pasted');
- hidden.val(Base64.encode(replaceBadChars(_editor.code())));
+ hidden.val(replaceBadChars(_editor.code()));
});
+ window._editor = _editor;
+
// bit of a hack to stop the editor buttons from causing a refresh when clicked
$('.note-toolbar').find('button, i, a').on('click', function(e) { e.preventDefault(); });
});
@@ -230,7 +254,7 @@ func domElementSelfClose(e *element) []byte {
e.viewBuf.Write([]byte(`<label class="active" for="` + strings.Join(strings.Split(e.label, " "), "-") + `">` + e.label + `</label>`))
}
e.viewBuf.Write([]byte(`<` + e.TagName + ` value="`))
- e.viewBuf.Write([]byte(e.data + `" `))
+ e.viewBuf.Write([]byte(html.EscapeString(e.data) + `" `))
for attr, value := range e.Attrs {
e.viewBuf.Write([]byte(attr + `="` + value + `" `))
@@ -275,7 +299,7 @@ func domElement(e *element) []byte {
e.viewBuf.Write([]byte(` name="` + e.Name + `"`))
e.viewBuf.Write([]byte(` >`))
- e.viewBuf.Write([]byte(e.data))
+ e.viewBuf.Write([]byte(html.EscapeString(e.data)))
e.viewBuf.Write([]byte(`</` + e.TagName + `>`))
e.viewBuf.Write([]byte(`</div>`))
diff --git a/management/manager/manager.go b/management/manager/manager.go
index 7fd78ff..d69b810 100644
--- a/management/manager/manager.go
+++ b/management/manager/manager.go
@@ -10,14 +10,14 @@ import (
const managerHTML = `
<div class="card editor">
- <form method="post" action="/admin/edit">
+ <form method="post" action="/admin/edit" enctype="multipart/form-data">
<input type="hidden" name="id" value="{{.ID}}"/>
<input type="hidden" name="type" value="{{.Kind}}"/>
{{ .Editor }}
</form>
<script>
- // remove all bad chars from all inputs in the form
- $('form input, form textarea').on('blur', function(e) {
+ // remove all bad chars from all inputs in the form, except file fields
+ $('form input:not([type=file]), form textarea').on('blur', function(e) {
var val = e.target.value;
e.target.value = replaceBadChars(val);
});