summaryrefslogtreecommitdiff
path: root/management
diff options
context:
space:
mode:
Diffstat (limited to 'management')
-rw-r--r--management/editor/dom.go258
-rw-r--r--management/editor/editor.go54
-rw-r--r--management/editor/elements.go34
-rw-r--r--management/editor/repeaters.go94
4 files changed, 343 insertions, 97 deletions
diff --git a/management/editor/dom.go b/management/editor/dom.go
index cf36ad9..41aafa7 100644
--- a/management/editor/dom.go
+++ b/management/editor/dom.go
@@ -3,13 +3,14 @@ package editor
import (
"bytes"
"html"
+ "log"
"strings"
)
type element struct {
- TagName string
- Attrs map[string]string
- Name string
+ tagName string
+ attrs map[string]string
+ name string
label string
data string
viewBuf *bytes.Buffer
@@ -17,9 +18,9 @@ type element struct {
func newElement(tagName, label, fieldName string, p interface{}, attrs map[string]string) *element {
return &element{
- TagName: tagName,
- Attrs: attrs,
- Name: tagNameFromStructField(fieldName, p),
+ tagName: tagName,
+ attrs: attrs,
+ name: tagNameFromStructField(fieldName, p),
label: label,
data: valueFromStructField(fieldName, p),
viewBuf: &bytes.Buffer{},
@@ -29,108 +30,265 @@ func newElement(tagName, label, fieldName string, p interface{}, attrs map[strin
// domElementSelfClose is a special DOM element which is parsed as a
// self-closing tag and thus needs to be created differently
func domElementSelfClose(e *element) []byte {
- e.viewBuf.Write([]byte(`<div class="input-field col s12">`))
+ _, err := e.viewBuf.WriteString(`<div class="input-field col s12">`)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElementSelfClose")
+ return nil
+ }
+
if e.label != "" {
- e.viewBuf.Write([]byte(`<label class="active" for="` + strings.Join(strings.Split(e.label, " "), "-") + `">` + e.label + `</label>`))
+ _, err = e.viewBuf.WriteString(
+ `<label class="active" for="` +
+ strings.Join(strings.Split(e.label, " "), "-") + `">` + e.label +
+ `</label>`)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElementSelfClose")
+ return nil
+ }
+ }
+
+ _, err = e.viewBuf.WriteString(`<` + e.tagName + ` value="`)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElementSelfClose")
+ return nil
+ }
+
+ _, err = e.viewBuf.WriteString(html.EscapeString(e.data) + `" `)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElementSelfClose")
+ return nil
+ }
+
+ for attr, value := range e.attrs {
+ _, err := e.viewBuf.WriteString(attr + `="` + value + `" `)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElementSelfClose")
+ return nil
+ }
+ }
+ _, err = e.viewBuf.WriteString(` name="` + e.name + `" />`)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElementSelfClose")
+ return nil
}
- e.viewBuf.Write([]byte(`<` + e.TagName + ` value="`))
- e.viewBuf.Write([]byte(html.EscapeString(e.data) + `" `))
- for attr, value := range e.Attrs {
- e.viewBuf.Write([]byte(attr + `="` + value + `" `))
+ _, err = e.viewBuf.WriteString(`</div>`)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElementSelfClose")
+ return nil
}
- e.viewBuf.Write([]byte(` name="` + e.Name + `"`))
- e.viewBuf.Write([]byte(` />`))
- e.viewBuf.Write([]byte(`</div>`))
return e.viewBuf.Bytes()
}
// domElementCheckbox is a special DOM element which is parsed as a
// checkbox input tag and thus needs to be created differently
func domElementCheckbox(e *element) []byte {
- e.viewBuf.Write([]byte(`<p class="col s6">`))
- e.viewBuf.Write([]byte(`<` + e.TagName + ` `))
+ _, err := e.viewBuf.WriteString(`<p class="col s6">`)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElementCheckbox")
+ return nil
+ }
+
+ _, err = e.viewBuf.WriteString(`<` + e.tagName + ` `)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElementCheckbox")
+ return nil
+ }
- for attr, value := range e.Attrs {
- e.viewBuf.Write([]byte(attr + `="` + value + `" `))
+ for attr, value := range e.attrs {
+ _, err := e.viewBuf.WriteString(attr + `="` + value + `" `)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElementCheckbox")
+ return nil
+ }
}
- e.viewBuf.Write([]byte(` name="` + e.Name + `"`))
- e.viewBuf.Write([]byte(` /> `))
+ _, err = e.viewBuf.WriteString(` name="` + e.name + `" />`)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElementCheckbox")
+ return nil
+ }
+
if e.label != "" {
- e.viewBuf.Write([]byte(`<label for="` + strings.Join(strings.Split(e.label, " "), "-") + `">` + e.label + `</label>`))
+ _, err = e.viewBuf.WriteString(
+ `<label for="` +
+ strings.Join(strings.Split(e.label, " "), "-") + `">` +
+ e.label + `</label>`)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElementCheckbox")
+ return nil
+ }
}
- e.viewBuf.Write([]byte(`</p>`))
+
+ _, err = e.viewBuf.WriteString(`</p>`)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElementCheckbox")
+ return nil
+ }
+
return e.viewBuf.Bytes()
}
// domElement creates a DOM element
func domElement(e *element) []byte {
- e.viewBuf.Write([]byte(`<div class="input-field col s12">`))
+ _, err := e.viewBuf.WriteString(`<div class="input-field col s12">`)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElement")
+ return nil
+ }
if e.label != "" {
- e.viewBuf.Write([]byte(`<label class="active" for="` + strings.Join(strings.Split(e.label, " "), "-") + `">` + e.label + `</label>`))
+ _, err = e.viewBuf.WriteString(
+ `<label class="active" for="` +
+ strings.Join(strings.Split(e.label, " "), "-") + `">` + e.label +
+ `</label>`)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElement")
+ return nil
+ }
}
- e.viewBuf.Write([]byte(`<` + e.TagName + ` `))
- for attr, value := range e.Attrs {
- e.viewBuf.Write([]byte(attr + `="` + string(value) + `" `))
+ _, err = e.viewBuf.WriteString(`<` + e.tagName + ` `)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElement")
+ return nil
}
- e.viewBuf.Write([]byte(` name="` + e.Name + `"`))
- e.viewBuf.Write([]byte(` >`))
- e.viewBuf.Write([]byte(html.EscapeString(e.data)))
- e.viewBuf.Write([]byte(`</` + e.TagName + `>`))
+ for attr, value := range e.attrs {
+ _, err = e.viewBuf.WriteString(attr + `="` + string(value) + `" `)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElement")
+ return nil
+ }
+ }
+ _, err = e.viewBuf.WriteString(` name="` + e.name + `" > `)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElement")
+ return nil
+ }
+
+ _, err = e.viewBuf.WriteString(html.EscapeString(e.data))
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElement")
+ return nil
+ }
+
+ _, err = e.viewBuf.WriteString(`</` + e.tagName + `>`)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElement")
+ return nil
+ }
+
+ _, err = e.viewBuf.WriteString(`</div>`)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElement")
+ return nil
+ }
- e.viewBuf.Write([]byte(`</div>`))
return e.viewBuf.Bytes()
}
func domElementWithChildrenSelect(e *element, children []*element) []byte {
- e.viewBuf.Write([]byte(`<div class="input-field col s6">`))
+ _, err := e.viewBuf.WriteString(`<div class="input-field col s6">`)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElementWithChildrenSelect")
+ return nil
+ }
- e.viewBuf.Write([]byte(`<` + e.TagName + ` `))
+ _, err = e.viewBuf.WriteString(`<` + e.tagName + ` `)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElementWithChildrenSelect")
+ return nil
+ }
- for attr, value := range e.Attrs {
- e.viewBuf.Write([]byte(attr + `="` + string(value) + `" `))
+ for attr, value := range e.attrs {
+ _, err = e.viewBuf.WriteString(attr + `="` + value + `" `)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElementWithChildrenSelect")
+ return nil
+ }
+ }
+ _, err = e.viewBuf.WriteString(` name="` + e.name + `" >`)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElementWithChildrenSelect")
+ return nil
}
- e.viewBuf.Write([]byte(` name="` + e.Name + `"`))
- e.viewBuf.Write([]byte(` >`))
// loop over children and create domElement for each child
for _, child := range children {
- e.viewBuf.Write(domElement(child))
+ _, err = e.viewBuf.Write(domElement(child))
+ if err != nil {
+ log.Println("Error writing HTML domElement to buffer: domElementWithChildrenSelect")
+ return nil
+ }
}
- e.viewBuf.Write([]byte(`</` + e.TagName + `>`))
+ _, err = e.viewBuf.WriteString(`</` + e.tagName + `>`)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElementWithChildrenSelect")
+ return nil
+ }
if e.label != "" {
- e.viewBuf.Write([]byte(`<label class="active">` + e.label + `</label>`))
+ _, err = e.viewBuf.WriteString(`<label class="active">` + e.label + `</label>`)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElementWithChildrenSelect")
+ return nil
+ }
+ }
+
+ _, err = e.viewBuf.WriteString(`</div>`)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElementWithChildrenSelect")
+ return nil
}
- e.viewBuf.Write([]byte(`</div>`))
return e.viewBuf.Bytes()
}
func domElementWithChildrenCheckbox(e *element, children []*element) []byte {
- e.viewBuf.Write([]byte(`<` + e.TagName + ` `))
+ _, err := e.viewBuf.WriteString(`<` + e.tagName + ` `)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElementWithChildrenCheckbox")
+ return nil
+ }
- for attr, value := range e.Attrs {
- e.viewBuf.Write([]byte(attr + `="` + value + `" `))
+ for attr, value := range e.attrs {
+ _, err = e.viewBuf.WriteString(attr + `="` + value + `" `)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElementWithChildrenCheckbox")
+ return nil
+ }
}
- e.viewBuf.Write([]byte(` >`))
+ _, err = e.viewBuf.WriteString(` >`)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElementWithChildrenCheckbox")
+ return nil
+ }
if e.label != "" {
- e.viewBuf.Write([]byte(`<label class="active">` + e.label + `</label>`))
+ _, err = e.viewBuf.WriteString(`<label class="active">` + e.label + `</label>`)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElementWithChildrenCheckbox")
+ return nil
+ }
}
// loop over children and create domElement for each child
for _, child := range children {
- e.viewBuf.Write(domElementCheckbox(child))
+ _, err = e.viewBuf.Write(domElementCheckbox(child))
+ if err != nil {
+ log.Println("Error writing HTML domElementCheckbox to buffer: domElementWithChildrenCheckbox")
+ return nil
+ }
}
- e.viewBuf.Write([]byte(`</` + e.TagName + `><div class="clear padding">&nbsp;</div>`))
+ _, err = e.viewBuf.WriteString(`</` + e.tagName + `><div class="clear padding">&nbsp;</div>`)
+ if err != nil {
+ log.Println("Error writing HTML string to buffer: domElementWithChildrenCheckbox")
+ return nil
+ }
return e.viewBuf.Bytes()
}
diff --git a/management/editor/editor.go b/management/editor/editor.go
index 7194c27..511edb2 100644
--- a/management/editor/editor.go
+++ b/management/editor/editor.go
@@ -4,6 +4,7 @@ package editor
import (
"bytes"
+ "log"
"net/http"
)
@@ -38,16 +39,28 @@ func Form(post Editable, fields ...Field) ([]byte, error) {
editor := post.Editor()
editor.ViewBuf = &bytes.Buffer{}
- editor.ViewBuf.Write([]byte(`<table><tbody class="row"><tr class="col s8"><td>`))
+ _, err := editor.ViewBuf.WriteString(`<table><tbody class="row"><tr class="col s8"><td>`)
+ if err != nil {
+ log.Println("Error writing HTML string to editor Form buffer")
+ return nil, err
+ }
for _, f := range fields {
addFieldToEditorView(editor, f)
}
- editor.ViewBuf.Write([]byte(`</td></tr>`))
+ _, err = editor.ViewBuf.WriteString(`</td></tr>`)
+ if err != nil {
+ log.Println("Error writing HTML string to editor Form buffer")
+ return nil, err
+ }
// content items with Item embedded have some default fields we need to render
- editor.ViewBuf.Write([]byte(`<tr class="col s4 default-fields"><td>`))
+ _, err = editor.ViewBuf.WriteString(`<tr class="col s4 default-fields"><td>`)
+ if err != nil {
+ log.Println("Error writing HTML string to editor Form buffer")
+ return nil, err
+ }
publishTime := `
<div class="row content-only __ponzu">
@@ -98,9 +111,16 @@ func Form(post Editable, fields ...Field) ([]byte, error) {
</div>
`
- editor.ViewBuf.Write([]byte(publishTime))
+ _, err = editor.ViewBuf.WriteString(publishTime)
+ if err != nil {
+ log.Println("Error writing HTML string to editor Form buffer")
+ return nil, err
+ }
- addPostDefaultFieldsToEditorView(post, editor)
+ err = addPostDefaultFieldsToEditorView(post, editor)
+ if err != nil {
+ return nil, err
+ }
submit := `
<div class="input-field post-controls">
@@ -186,16 +206,26 @@ func Form(post Editable, fields ...Field) ([]byte, error) {
});
</script>
`
- editor.ViewBuf.Write([]byte(submit + script + `</td></tr></tbody></table>`))
+ _, err = editor.ViewBuf.WriteString(submit + script + `</td></tr></tbody></table>`)
+ if err != nil {
+ log.Println("Error writing HTML string to editor Form buffer")
+ return nil, err
+ }
return editor.ViewBuf.Bytes(), nil
}
-func addFieldToEditorView(e *Editor, f Field) {
- e.ViewBuf.Write(f.View)
+func addFieldToEditorView(e *Editor, f Field) error {
+ _, err := e.ViewBuf.Write(f.View)
+ if err != nil {
+ log.Println("Error writing field view to editor view buffer")
+ return err
+ }
+
+ return nil
}
-func addPostDefaultFieldsToEditorView(p Editable, e *Editor) {
+func addPostDefaultFieldsToEditorView(p Editable, e *Editor) error {
defaults := []Field{
Field{
View: Input("Slug", p, map[string]string{
@@ -220,7 +250,11 @@ func addPostDefaultFieldsToEditorView(p Editable, e *Editor) {
}
for _, f := range defaults {
- addFieldToEditorView(e, f)
+ err := addFieldToEditorView(e, f)
+ if err != nil {
+ return err
+ }
}
+ return nil
}
diff --git a/management/editor/elements.go b/management/editor/elements.go
index 873e81c..b82b220 100644
--- a/management/editor/elements.go
+++ b/management/editor/elements.go
@@ -11,7 +11,11 @@ import (
// The `fieldName` argument will cause a panic if it is not exactly the string
// form of the struct field that this editor input is representing
// type Person struct {
+// item.Item
+// editor editor.Editor
+//
// Name string `json:"name"`
+// //...
// }
//
// func (p *Person) MarshalEditor() ([]byte, error) {
@@ -64,9 +68,9 @@ func Timestamp(fieldName string, p interface{}, attrs map[string]string) []byte
}
e := &element{
- TagName: "input",
- Attrs: attrs,
- Name: tagNameFromStructField(fieldName, p),
+ tagName: "input",
+ attrs: attrs,
+ name: tagNameFromStructField(fieldName, p),
label: attrs["label"],
data: data,
viewBuf: &bytes.Buffer{},
@@ -161,9 +165,9 @@ func Richtext(fieldName string, p interface{}, attrs map[string]string) []byte {
attrs["class"] = "richtext " + fieldName
attrs["id"] = "richtext-" + fieldName
div := &element{
- TagName: "div",
- Attrs: attrs,
- Name: "",
+ tagName: "div",
+ attrs: attrs,
+ name: "",
label: "",
data: "",
viewBuf: &bytes.Buffer{},
@@ -261,16 +265,16 @@ func Select(fieldName string, p interface{}, attrs, options map[string]string) [
// provide a call to action for the select element
cta := &element{
- TagName: "option",
- Attrs: map[string]string{"disabled": "true", "selected": "true"},
+ tagName: "option",
+ attrs: map[string]string{"disabled": "true", "selected": "true"},
data: "Select an option...",
viewBuf: &bytes.Buffer{},
}
// provide a selection reset (will store empty string in db)
reset := &element{
- TagName: "option",
- Attrs: map[string]string{"value": ""},
+ tagName: "option",
+ attrs: map[string]string{"value": ""},
data: "None",
viewBuf: &bytes.Buffer{},
}
@@ -283,8 +287,8 @@ func Select(fieldName string, p interface{}, attrs, options map[string]string) [
optAttrs["selected"] = "true"
}
opt := &element{
- TagName: "option",
- Attrs: optAttrs,
+ tagName: "option",
+ attrs: optAttrs,
data: v,
viewBuf: &bytes.Buffer{},
}
@@ -328,9 +332,9 @@ func Checkbox(fieldName string, p interface{}, attrs, options map[string]string)
// create a *element manually using the modified tagNameFromStructFieldMulti
// func since this is for a multi-value name
input := &element{
- TagName: "input",
- Attrs: inputAttrs,
- Name: tagNameFromStructFieldMulti(fieldName, i, p),
+ tagName: "input",
+ attrs: inputAttrs,
+ name: tagNameFromStructFieldMulti(fieldName, i, p),
label: v,
data: "",
viewBuf: &bytes.Buffer{},
diff --git a/management/editor/repeaters.go b/management/editor/repeaters.go
index 37fb982..617caee 100644
--- a/management/editor/repeaters.go
+++ b/management/editor/repeaters.go
@@ -3,6 +3,7 @@ package editor
import (
"bytes"
"fmt"
+ "log"
"strings"
)
@@ -13,7 +14,11 @@ import (
// The `fieldName` argument will cause a panic if it is not exactly the string
// form of the struct field that this editor input is representing
// type Person struct {
+// item.Item
+// editor editor.Editor
+//
// Names []string `json:"names"`
+// //...
// }
//
// func (p *Person) MarshalEditor() ([]byte, error) {
@@ -35,12 +40,17 @@ func InputRepeater(fieldName string, p interface{}, attrs map[string]string) []b
scope := tagNameFromStructField(fieldName, p)
html := bytes.Buffer{}
- html.WriteString(`<span class="__ponzu-repeat ` + scope + `">`)
+ _, err := html.WriteString(`<span class="__ponzu-repeat ` + scope + `">`)
+ if err != nil {
+ log.Println("Error writing HTML string to InputRepeater buffer")
+ return nil
+ }
+
for i, val := range vals {
el := &element{
- TagName: "input",
- Attrs: attrs,
- Name: tagNameFromStructFieldMulti(fieldName, i, p),
+ tagName: "input",
+ attrs: attrs,
+ name: tagNameFromStructFieldMulti(fieldName, i, p),
data: val,
viewBuf: &bytes.Buffer{},
}
@@ -50,9 +60,17 @@ func InputRepeater(fieldName string, p interface{}, attrs map[string]string) []b
el.label = attrs["label"]
}
- html.Write(domElementSelfClose(el))
+ _, err := html.Write(domElementSelfClose(el))
+ if err != nil {
+ log.Println("Error writing domElementSelfClose to InputRepeater buffer")
+ return nil
+ }
+ }
+ _, err = html.WriteString(`</span>`)
+ if err != nil {
+ log.Println("Error writing HTML string to InputRepeater buffer")
+ return nil
}
- html.WriteString(`</span>`)
return append(html.Bytes(), RepeatController(fieldName, p, "input", ".input-field")...)
}
@@ -68,7 +86,11 @@ func SelectRepeater(fieldName string, p interface{}, attrs, options map[string]s
// <option value="{map key}">{map value}</option>
scope := tagNameFromStructField(fieldName, p)
html := bytes.Buffer{}
- html.WriteString(`<span class="__ponzu-repeat ` + scope + `">`)
+ _, err := html.WriteString(`<span class="__ponzu-repeat ` + scope + `">`)
+ if err != nil {
+ log.Println("Error writing HTML string to SelectRepeater buffer")
+ return nil
+ }
// find the field values in p to determine if an option is pre-selected
fieldVals := valueFromStructField(fieldName, p)
@@ -80,9 +102,9 @@ func SelectRepeater(fieldName string, p interface{}, attrs, options map[string]s
if len(vals) > 0 {
for i, val := range vals {
sel := &element{
- TagName: "select",
- Attrs: attrs,
- Name: tagNameFromStructFieldMulti(fieldName, i, p),
+ tagName: "select",
+ attrs: attrs,
+ name: tagNameFromStructFieldMulti(fieldName, i, p),
viewBuf: &bytes.Buffer{},
}
@@ -96,16 +118,16 @@ func SelectRepeater(fieldName string, p interface{}, attrs, options map[string]s
// provide a call to action for the select element
cta := &element{
- TagName: "option",
- Attrs: map[string]string{"disabled": "true", "selected": "true"},
+ tagName: "option",
+ attrs: map[string]string{"disabled": "true", "selected": "true"},
data: "Select an option...",
viewBuf: &bytes.Buffer{},
}
// provide a selection reset (will store empty string in db)
reset := &element{
- TagName: "option",
- Attrs: map[string]string{"value": ""},
+ tagName: "option",
+ attrs: map[string]string{"value": ""},
data: "None",
viewBuf: &bytes.Buffer{},
}
@@ -118,8 +140,8 @@ func SelectRepeater(fieldName string, p interface{}, attrs, options map[string]s
optAttrs["selected"] = "true"
}
opt := &element{
- TagName: "option",
- Attrs: optAttrs,
+ tagName: "option",
+ attrs: optAttrs,
data: v,
viewBuf: &bytes.Buffer{},
}
@@ -127,11 +149,20 @@ func SelectRepeater(fieldName string, p interface{}, attrs, options map[string]s
opts = append(opts, opt)
}
- html.Write(domElementWithChildrenSelect(sel, opts))
+ _, err := html.Write(domElementWithChildrenSelect(sel, opts))
+ if err != nil {
+ log.Println("Error writing domElementWithChildrenSelect to SelectRepeater buffer")
+ return nil
+ }
}
}
- html.WriteString(`</span>`)
+ _, err = html.WriteString(`</span>`)
+ if err != nil {
+ log.Println("Error writing HTML string to SelectRepeater buffer")
+ return nil
+ }
+
return append(html.Bytes(), RepeatController(fieldName, p, "select", ".input-field")...)
}
@@ -223,14 +254,33 @@ func FileRepeater(fieldName string, p interface{}, attrs map[string]string) []by
name := tagNameFromStructField(fieldName, p)
html := bytes.Buffer{}
- html.WriteString(`<span class="__ponzu-repeat ` + name + `">`)
+ _, err := html.WriteString(`<span class="__ponzu-repeat ` + name + `">`)
+ if err != nil {
+ log.Println("Error writing HTML string to FileRepeater buffer")
+ return nil
+ }
+
for i, val := range vals {
className := fmt.Sprintf("%s-%d", name, i)
nameidx := tagNameFromStructFieldMulti(fieldName, i, p)
- html.WriteString(fmt.Sprintf(tmpl, nameidx, addLabelFirst(i, attrs["label"]), val, className, fieldName))
- html.WriteString(fmt.Sprintf(script, nameidx, className))
+
+ _, err := html.WriteString(fmt.Sprintf(tmpl, nameidx, addLabelFirst(i, attrs["label"]), val, className, fieldName))
+ if err != nil {
+ log.Println("Error writing HTML string to FileRepeater buffer")
+ return nil
+ }
+
+ _, err = html.WriteString(fmt.Sprintf(script, nameidx, className))
+ if err != nil {
+ log.Println("Error writing HTML string to FileRepeater buffer")
+ return nil
+ }
+ }
+ _, err = html.WriteString(`</span>`)
+ if err != nil {
+ log.Println("Error writing HTML string to FileRepeater buffer")
+ return nil
}
- html.WriteString(`</span>`)
return append(html.Bytes(), RepeatController(fieldName, p, "input.upload", "div.file-input."+fieldName)...)
}