diff options
author | Steve Manuel <nilslice@gmail.com> | 2016-10-02 01:46:05 -0700 |
---|---|---|
committer | Steve Manuel <nilslice@gmail.com> | 2016-10-02 01:46:05 -0700 |
commit | 37d3f13e071cfdb5e063c67dec604c10dbc6ddde (patch) | |
tree | c9f2d885dd1c1c38ef6f9c07b24c58a4ff73d6a2 /management/editor/elements.go | |
parent | 0ae265fd9c8496e107b8794bcf583885b20dd37c (diff) |
refactor editor view buffer to include the Item default fields.. may wantto reconsider this later as the two packages are now very closely tied. also added UI structural changes
Diffstat (limited to 'management/editor/elements.go')
-rw-r--r-- | management/editor/elements.go | 81 |
1 files changed, 31 insertions, 50 deletions
diff --git a/management/editor/elements.go b/management/editor/elements.go index 4ea0be0..dd71aa1 100644 --- a/management/editor/elements.go +++ b/management/editor/elements.go @@ -4,6 +4,7 @@ import ( "bytes" "fmt" "reflect" + "strings" ) type element struct { @@ -48,6 +49,7 @@ func Select(fieldName string, p interface{}, attrs, options map[string]string) [ // may need to alloc a buffer, as we will probably loop through options // and append the []byte from domElement() called for each option + attrs["class"] = "browser-default" sel := newElement("select", attrs["label"], fieldName, p, attrs) var opts []*element @@ -69,29 +71,22 @@ func Select(fieldName string, p interface{}, attrs, options map[string]string) [ opts = append(opts, cta, reset) - var val string for k, v := range options { + optAttrs := map[string]string{"value": k} if k == fieldVal { - val = "true" - } else { - val = "false" + optAttrs["selected"] = "true" } opt := &element{ TagName: "option", - Attrs: map[string]string{"value": k, "selected": val}, + Attrs: optAttrs, data: v, viewBuf: &bytes.Buffer{}, } - // if val is false (unselected option), delete the attr for clarity - if val == "false" { - delete(opt.Attrs, "selected") - } - opts = append(opts, opt) } - return domElementWithChildren(sel, opts) + return domElementWithChildrenSelect(sel, opts) } // Checkbox returns the []byte of a set of <input type="checkbox"> HTML elements @@ -100,15 +95,9 @@ func Select(fieldName string, p interface{}, attrs, options map[string]string) [ // 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 func Checkbox(fieldName string, p interface{}, attrs, options map[string]string) []byte { - // options are the value attr and the display value, i.e. - /* - <label> - {map value} - <input type="checkbox" name="{fieldName}" value="{map key}"/> - </label> - */ - + attrs["class"] = "input-field col s12" div := newElement("div", attrs["label"], "", p, attrs) + var opts []*element // get the pre-checked options if this is already an existing post @@ -120,12 +109,13 @@ func Checkbox(fieldName string, p interface{}, attrs, options map[string]string) inputAttrs := map[string]string{ "type": "checkbox", "value": k, + "id": strings.Join(strings.Split(v, " "), "-"), } // check if k is in the pre-checked values and set to checked for _, x := range checked { if k == x { - inputAttrs["checked"] = "true" + inputAttrs["checked"] = "checked" } } @@ -150,8 +140,9 @@ func Checkbox(fieldName string, p interface{}, attrs, options map[string]string) // 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">`)) if e.label != "" { - e.viewBuf.Write([]byte(`<label>` + e.label)) + 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 + `" `)) @@ -162,19 +153,14 @@ func domElementSelfClose(e *element) []byte { e.viewBuf.Write([]byte(` name="` + e.Name + `"`)) e.viewBuf.Write([]byte(` />`)) - if e.label != "" { - e.viewBuf.Write([]byte(`</label>`)) - } - + 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 { - if e.label != "" { - e.viewBuf.Write([]byte(`<label>`)) - } + e.viewBuf.Write([]byte(`<p class="col s6">`)) e.viewBuf.Write([]byte(`<` + e.TagName + ` `)) for attr, value := range e.Attrs { @@ -182,18 +168,19 @@ func domElementCheckbox(e *element) []byte { } e.viewBuf.Write([]byte(` name="` + e.Name + `"`)) e.viewBuf.Write([]byte(` /> `)) - if e.label != "" { - e.viewBuf.Write([]byte(e.label + `</label>`)) + e.viewBuf.Write([]byte(`<label for="` + strings.Join(strings.Split(e.label, " "), "-") + `">` + e.label + `</label>`)) } - + e.viewBuf.Write([]byte(`</p>`)) return e.viewBuf.Bytes() } // domElement creates a DOM element func domElement(e *element) []byte { + e.viewBuf.Write([]byte(`<div class="input-field col s12">`)) + if e.label != "" { - e.viewBuf.Write([]byte(`<label>` + e.label)) + e.viewBuf.Write([]byte(`<label class="active" for="` + strings.Join(strings.Split(e.label, " "), "-") + `">` + e.label + `</label>`)) } e.viewBuf.Write([]byte(`<` + e.TagName + ` `)) @@ -206,17 +193,13 @@ func domElement(e *element) []byte { e.viewBuf.Write([]byte(e.data)) e.viewBuf.Write([]byte(`</` + e.TagName + `>`)) - if e.label != "" { - e.viewBuf.Write([]byte(`</label>`)) - } - + e.viewBuf.Write([]byte(`</div>`)) return e.viewBuf.Bytes() } -func domElementWithChildren(e *element, children []*element) []byte { - if e.label != "" { - e.viewBuf.Write([]byte(`<label>` + e.label)) - } +func domElementWithChildrenSelect(e *element, children []*element) []byte { + e.viewBuf.Write([]byte(`<div class="input-field col s6">`)) + e.viewBuf.Write([]byte(`<` + e.TagName + ` `)) for attr, value := range e.Attrs { @@ -233,34 +216,32 @@ func domElementWithChildren(e *element, children []*element) []byte { e.viewBuf.Write([]byte(`</` + e.TagName + `>`)) if e.label != "" { - e.viewBuf.Write([]byte(`</label>`)) + e.viewBuf.Write([]byte(`<label class="active">` + e.label + `</label>`)) } + e.viewBuf.Write([]byte(`</div>`)) return e.viewBuf.Bytes() } func domElementWithChildrenCheckbox(e *element, children []*element) []byte { - if e.label != "" { - e.viewBuf.Write([]byte(`<label>` + e.label)) - } e.viewBuf.Write([]byte(`<` + e.TagName + ` `)) for attr, value := range e.Attrs { e.viewBuf.Write([]byte(attr + `="` + value + `" `)) } - e.viewBuf.Write([]byte(` name="` + e.Name + `"`)) + e.viewBuf.Write([]byte(` >`)) + if e.label != "" { + e.viewBuf.Write([]byte(`<label class="active">` + e.label + `</label>`)) + } + // loop over children and create domElement for each child for _, child := range children { e.viewBuf.Write(domElementCheckbox(child)) } - e.viewBuf.Write([]byte(`</` + e.TagName + `>`)) - - if e.label != "" { - e.viewBuf.Write([]byte(`</label>`)) - } + e.viewBuf.Write([]byte(`</` + e.TagName + `><div class="clear padding"> </div>`)) return e.viewBuf.Bytes() } |