diff options
Diffstat (limited to 'management/editor/dom.go')
-rw-r--r-- | management/editor/dom.go | 231 |
1 files changed, 117 insertions, 114 deletions
diff --git a/management/editor/dom.go b/management/editor/dom.go index 41aafa7..5888db5 100644 --- a/management/editor/dom.go +++ b/management/editor/dom.go @@ -7,288 +7,291 @@ import ( "strings" ) -type element struct { - tagName string - attrs map[string]string - name string - label string - data string - viewBuf *bytes.Buffer +// Element is a basic struct for representing DOM elements +type Element struct { + TagName string + Attrs map[string]string + Name string + Label string + Data string + ViewBuf *bytes.Buffer } -func newElement(tagName, label, fieldName string, p interface{}, attrs map[string]string) *element { - return &element{ - tagName: tagName, - attrs: attrs, - name: tagNameFromStructField(fieldName, p), - label: label, - data: valueFromStructField(fieldName, p), - viewBuf: &bytes.Buffer{}, +// NewElement returns an Element with Name and Data already processed from the +// fieldName and content interface provided +func NewElement(tagName, label, fieldName string, p interface{}, attrs map[string]string) *Element { + return &Element{ + TagName: tagName, + Attrs: attrs, + Name: TagNameFromStructField(fieldName, p), + Label: label, + Data: ValueFromStructField(fieldName, p), + ViewBuf: &bytes.Buffer{}, } } -// domElementSelfClose is a special DOM element which is parsed as a +// 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 { - _, err := e.viewBuf.WriteString(`<div class="input-field col s12">`) +func DOMElementSelfClose(e *Element) []byte { + _, err := e.ViewBuf.WriteString(`<div class="input-field col s12">`) if err != nil { - log.Println("Error writing HTML string to buffer: domElementSelfClose") + log.Println("Error writing HTML string to buffer: DOMElementSelfClose") return nil } - if e.label != "" { - _, err = e.viewBuf.WriteString( + if e.Label != "" { + _, err = e.ViewBuf.WriteString( `<label class="active" for="` + - strings.Join(strings.Split(e.label, " "), "-") + `">` + e.label + + strings.Join(strings.Split(e.Label, " "), "-") + `">` + e.Label + `</label>`) if err != nil { - log.Println("Error writing HTML string to buffer: domElementSelfClose") + log.Println("Error writing HTML string to buffer: DOMElementSelfClose") return nil } } - _, err = e.viewBuf.WriteString(`<` + e.tagName + ` value="`) + _, err = e.ViewBuf.WriteString(`<` + e.TagName + ` value="`) if err != nil { - log.Println("Error writing HTML string to buffer: domElementSelfClose") + log.Println("Error writing HTML string to buffer: DOMElementSelfClose") return nil } - _, err = e.viewBuf.WriteString(html.EscapeString(e.data) + `" `) + _, err = e.ViewBuf.WriteString(html.EscapeString(e.Data) + `" `) if err != nil { - log.Println("Error writing HTML string to buffer: domElementSelfClose") + log.Println("Error writing HTML string to buffer: DOMElementSelfClose") return nil } - for attr, value := range e.attrs { - _, err := e.viewBuf.WriteString(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: domElementSelfClose") + log.Println("Error writing HTML string to buffer: DOMElementSelfClose") return nil } } - _, err = e.viewBuf.WriteString(` name="` + e.name + `" />`) + _, err = e.ViewBuf.WriteString(` name="` + e.Name + `" />`) if err != nil { - log.Println("Error writing HTML string to buffer: domElementSelfClose") + log.Println("Error writing HTML string to buffer: DOMElementSelfClose") return nil } - _, err = e.viewBuf.WriteString(`</div>`) + _, err = e.ViewBuf.WriteString(`</div>`) if err != nil { - log.Println("Error writing HTML string to buffer: domElementSelfClose") + log.Println("Error writing HTML string to buffer: DOMElementSelfClose") return nil } - return e.viewBuf.Bytes() + return e.ViewBuf.Bytes() } -// domElementCheckbox is a special DOM element which is parsed as a +// 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 { - _, err := e.viewBuf.WriteString(`<p class="col s6">`) +func DOMElementCheckbox(e *Element) []byte { + _, err := e.ViewBuf.WriteString(`<p class="col s6">`) if err != nil { - log.Println("Error writing HTML string to buffer: domElementCheckbox") + log.Println("Error writing HTML string to buffer: DOMElementCheckbox") return nil } - _, err = e.viewBuf.WriteString(`<` + e.tagName + ` `) + _, err = e.ViewBuf.WriteString(`<` + e.TagName + ` `) if err != nil { - log.Println("Error writing HTML string to buffer: domElementCheckbox") + log.Println("Error writing HTML string to buffer: DOMElementCheckbox") return nil } - for attr, value := range e.attrs { - _, err := e.viewBuf.WriteString(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") + log.Println("Error writing HTML string to buffer: DOMElementCheckbox") return nil } } - _, err = e.viewBuf.WriteString(` name="` + e.name + `" />`) + _, err = e.ViewBuf.WriteString(` name="` + e.Name + `" />`) if err != nil { - log.Println("Error writing HTML string to buffer: domElementCheckbox") + log.Println("Error writing HTML string to buffer: DOMElementCheckbox") return nil } - if e.label != "" { - _, err = e.viewBuf.WriteString( + if e.Label != "" { + _, err = e.ViewBuf.WriteString( `<label for="` + - strings.Join(strings.Split(e.label, " "), "-") + `">` + - e.label + `</label>`) + strings.Join(strings.Split(e.Label, " "), "-") + `">` + + e.Label + `</label>`) if err != nil { - log.Println("Error writing HTML string to buffer: domElementCheckbox") + log.Println("Error writing HTML string to buffer: DOMElementCheckbox") return nil } } - _, err = e.viewBuf.WriteString(`</p>`) + _, err = e.ViewBuf.WriteString(`</p>`) if err != nil { - log.Println("Error writing HTML string to buffer: domElementCheckbox") + log.Println("Error writing HTML string to buffer: DOMElementCheckbox") return nil } - return e.viewBuf.Bytes() + return e.ViewBuf.Bytes() } -// domElement creates a DOM element -func domElement(e *element) []byte { - _, err := e.viewBuf.WriteString(`<div class="input-field col s12">`) +// DOMElement creates a DOM element +func DOMElement(e *Element) []byte { + _, err := e.ViewBuf.WriteString(`<div class="input-field col s12">`) if err != nil { - log.Println("Error writing HTML string to buffer: domElement") + log.Println("Error writing HTML string to buffer: DOMElement") return nil } - if e.label != "" { - _, err = e.viewBuf.WriteString( + if e.Label != "" { + _, err = e.ViewBuf.WriteString( `<label class="active" for="` + - strings.Join(strings.Split(e.label, " "), "-") + `">` + e.label + + strings.Join(strings.Split(e.Label, " "), "-") + `">` + e.Label + `</label>`) if err != nil { - log.Println("Error writing HTML string to buffer: domElement") + log.Println("Error writing HTML string to buffer: DOMElement") return nil } } - _, err = e.viewBuf.WriteString(`<` + e.tagName + ` `) + _, err = e.ViewBuf.WriteString(`<` + e.TagName + ` `) if err != nil { - log.Println("Error writing HTML string to buffer: domElement") + log.Println("Error writing HTML string to buffer: DOMElement") return nil } - for attr, value := range e.attrs { - _, err = e.viewBuf.WriteString(attr + `="` + string(value) + `" `) + 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") + log.Println("Error writing HTML string to buffer: DOMElement") return nil } } - _, err = e.viewBuf.WriteString(` name="` + e.name + `" > `) + _, err = e.ViewBuf.WriteString(` name="` + e.Name + `" >`) if err != nil { - log.Println("Error writing HTML string to buffer: domElement") + log.Println("Error writing HTML string to buffer: DOMElement") return nil } - _, err = e.viewBuf.WriteString(html.EscapeString(e.data)) + _, err = e.ViewBuf.WriteString(html.EscapeString(e.Data)) if err != nil { - log.Println("Error writing HTML string to buffer: domElement") + log.Println("Error writing HTML string to buffer: DOMElement") return nil } - _, err = e.viewBuf.WriteString(`</` + e.tagName + `>`) + _, err = e.ViewBuf.WriteString(`</` + e.TagName + `>`) if err != nil { - log.Println("Error writing HTML string to buffer: domElement") + log.Println("Error writing HTML string to buffer: DOMElement") return nil } - _, err = e.viewBuf.WriteString(`</div>`) + _, err = e.ViewBuf.WriteString(`</div>`) if err != nil { - log.Println("Error writing HTML string to buffer: domElement") + log.Println("Error writing HTML string to buffer: DOMElement") return nil } - return e.viewBuf.Bytes() + return e.ViewBuf.Bytes() } -func domElementWithChildrenSelect(e *element, children []*element) []byte { - _, err := e.viewBuf.WriteString(`<div class="input-field col s6">`) +func DOMElementWithChildrenSelect(e *Element, children []*Element) []byte { + _, err := e.ViewBuf.WriteString(`<div class="input-field col s6">`) if err != nil { - log.Println("Error writing HTML string to buffer: domElementWithChildrenSelect") + log.Println("Error writing HTML string to buffer: DOMElementWithChildrenSelect") return nil } - _, err = e.viewBuf.WriteString(`<` + e.tagName + ` `) + _, err = e.ViewBuf.WriteString(`<` + e.TagName + ` `) if err != nil { - log.Println("Error writing HTML string to buffer: domElementWithChildrenSelect") + log.Println("Error writing HTML string to buffer: DOMElementWithChildrenSelect") return nil } - for attr, value := range e.attrs { - _, err = e.viewBuf.WriteString(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: domElementWithChildrenSelect") + log.Println("Error writing HTML string to buffer: DOMElementWithChildrenSelect") return nil } } - _, err = e.viewBuf.WriteString(` name="` + e.name + `" >`) + _, err = e.ViewBuf.WriteString(` name="` + e.Name + `" >`) if err != nil { - log.Println("Error writing HTML string to buffer: domElementWithChildrenSelect") + log.Println("Error writing HTML string to buffer: DOMElementWithChildrenSelect") return nil } - // loop over children and create domElement for each child + // loop over children and create DOMElement for each child for _, child := range children { - _, err = e.viewBuf.Write(domElement(child)) + _, err = e.ViewBuf.Write(DOMElement(child)) if err != nil { - log.Println("Error writing HTML domElement to buffer: domElementWithChildrenSelect") + log.Println("Error writing HTML DOMElement to buffer: DOMElementWithChildrenSelect") return nil } } - _, err = e.viewBuf.WriteString(`</` + e.tagName + `>`) + _, err = e.ViewBuf.WriteString(`</` + e.TagName + `>`) if err != nil { - log.Println("Error writing HTML string to buffer: domElementWithChildrenSelect") + log.Println("Error writing HTML string to buffer: DOMElementWithChildrenSelect") return nil } - if e.label != "" { - _, err = e.viewBuf.WriteString(`<label class="active">` + e.label + `</label>`) + if e.Label != "" { + _, err = e.ViewBuf.WriteString(`<label class="active">` + e.Label + `</label>`) if err != nil { - log.Println("Error writing HTML string to buffer: domElementWithChildrenSelect") + log.Println("Error writing HTML string to buffer: DOMElementWithChildrenSelect") return nil } } - _, err = e.viewBuf.WriteString(`</div>`) + _, err = e.ViewBuf.WriteString(`</div>`) if err != nil { - log.Println("Error writing HTML string to buffer: domElementWithChildrenSelect") + log.Println("Error writing HTML string to buffer: DOMElementWithChildrenSelect") return nil } - return e.viewBuf.Bytes() + return e.ViewBuf.Bytes() } -func domElementWithChildrenCheckbox(e *element, children []*element) []byte { - _, err := e.viewBuf.WriteString(`<` + e.tagName + ` `) +func DOMElementWithChildrenCheckbox(e *Element, children []*Element) []byte { + _, err := e.ViewBuf.WriteString(`<` + e.TagName + ` `) if err != nil { - log.Println("Error writing HTML string to buffer: domElementWithChildrenCheckbox") + log.Println("Error writing HTML string to buffer: DOMElementWithChildrenCheckbox") return nil } - for attr, value := range e.attrs { - _, err = e.viewBuf.WriteString(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") + log.Println("Error writing HTML string to buffer: DOMElementWithChildrenCheckbox") return nil } } - _, err = e.viewBuf.WriteString(` >`) + _, err = e.ViewBuf.WriteString(` >`) if err != nil { - log.Println("Error writing HTML string to buffer: domElementWithChildrenCheckbox") + log.Println("Error writing HTML string to buffer: DOMElementWithChildrenCheckbox") return nil } - if e.label != "" { - _, err = e.viewBuf.WriteString(`<label class="active">` + e.label + `</label>`) + if e.Label != "" { + _, err = e.ViewBuf.WriteString(`<label class="active">` + e.Label + `</label>`) if err != nil { - log.Println("Error writing HTML string to buffer: domElementWithChildrenCheckbox") + log.Println("Error writing HTML string to buffer: DOMElementWithChildrenCheckbox") return nil } } - // loop over children and create domElement for each child + // loop over children and create DOMElement for each child for _, child := range children { - _, err = e.viewBuf.Write(domElementCheckbox(child)) + _, err = e.ViewBuf.Write(DOMElementCheckbox(child)) if err != nil { - log.Println("Error writing HTML domElementCheckbox to buffer: domElementWithChildrenCheckbox") + log.Println("Error writing HTML DOMElementCheckbox to buffer: DOMElementWithChildrenCheckbox") return nil } } - _, err = e.viewBuf.WriteString(`</` + e.tagName + `><div class="clear padding"> </div>`) + _, err = e.ViewBuf.WriteString(`</` + e.TagName + `><div class="clear padding"> </div>`) if err != nil { - log.Println("Error writing HTML string to buffer: domElementWithChildrenCheckbox") + log.Println("Error writing HTML string to buffer: DOMElementWithChildrenCheckbox") return nil } - return e.viewBuf.Bytes() + return e.ViewBuf.Bytes() } |