123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- package builder
- import (
- "html"
- "golang-fave/engine/wrapper"
- )
- const (
- DFKHidden = iota
- DFKText
- DFKEmail
- DFKPassword
- DFKTextArea
- DFKCheckBox
- DFKSubmit
- DFKMessage
- )
- type DataFormField struct {
- Caption string
- Kind int
- Name string
- Value string
- Placeholder string
- Hint string
- Target string
- Required bool
- CallBack func(field *DataFormField) string
- }
- func DataForm(wrap *wrapper.Wrapper, data []DataFormField) string {
- result := `<form class="data-form" action="/cp/" method="post" autocomplete="off">`
- result += `<div class="hidden">`
- for _, field := range data {
- if field.Kind == DFKHidden {
- if field.CallBack != nil {
- result += field.CallBack(&field)
- } else {
- result += `<input type="hidden" name="` + field.Name + `" value="` + html.EscapeString(field.Value) + `">`
- }
- }
- }
- result += `</div>`
- for _, field := range data {
- if field.Kind != DFKHidden && field.Kind != DFKSubmit && field.Kind != DFKMessage {
- if field.CallBack != nil {
- result += field.CallBack(&field)
- } else {
- required := ``
- if field.Required {
- required = ` required`
- }
- result += `<div class="form-group">`
- result += `<div class="row">`
- result += `<div class="col-3">`
- if field.Kind != DFKCheckBox {
- result += `<label for="lbl_` + field.Name + `">` + field.Caption + `</label>`
- } else {
- result += `<label>` + field.Caption + `</label>`
- }
- result += `</div>`
- result += `<div class="col-9">`
- result += `<div>`
- if field.Kind == DFKText {
- result += `<input class="form-control" type="text" id="lbl_` + field.Name + `" name="` + field.Name + `" value="` + html.EscapeString(field.Value) + `" placeholder="` + field.Placeholder + `" autocomplete="off"` + required + `>`
- } else if field.Kind == DFKEmail {
- result += `<input class="form-control" type="email" id="lbl_` + field.Name + `" name="` + field.Name + `" value="` + html.EscapeString(field.Value) + `" placeholder="` + field.Placeholder + `" autocomplete="off"` + required + `>`
- } else if field.Kind == DFKPassword {
- result += `<input class="form-control" type="password" id="lbl_` + field.Name + `" name="` + field.Name + `" value="` + html.EscapeString(field.Value) + `" placeholder="` + field.Placeholder + `" autocomplete="off"` + required + `>`
- } else if field.Kind == DFKTextArea {
- result += `<textarea class="form-control" id="lbl_` + field.Name + `" name="` + field.Name + `" placeholder="` + field.Placeholder + `" autocomplete="off"` + required + `>` + html.EscapeString(field.Value) + `</textarea>`
- } else if field.Kind == DFKCheckBox {
- checked := ""
- if field.Value != "0" {
- checked = " checked"
- }
- result += `<div class="checkbox-ios"><input class="form-control" type="checkbox" id="lbl_` + field.Name + `" name="` + field.Name + `" value="1"` + `" autocomplete="off"` + required + checked + `><label for="lbl_` + field.Name + `"></label></div>`
- }
- result += `</div>`
- if field.Hint != "" {
- result += `<div><small>` + field.Hint + `</small></div>`
- }
- result += `</div>`
- result += `</div>`
- result += `</div>`
- }
- }
- }
- // TODO: optimize this...
- for _, field := range data {
- if field.Kind == DFKMessage {
- if field.CallBack != nil {
- result += field.CallBack(&field)
- } else {
- result += `<div class="row">`
- result += `<div class="col-3">`
- result += `</div>`
- result += `<div class="col-9">`
- result += `<div class="sys-messages"></div>`
- result += `</div>`
- result += `</div>`
- }
- }
- }
- for _, field := range data {
- if field.Kind == DFKSubmit {
- if field.CallBack != nil {
- result += field.CallBack(&field)
- } else {
- result += `<div class="row hidden">`
- result += `<div class="col-3">`
- result += ` `
- result += `</div>`
- result += `<div class="col-9">`
- result += `<button type="submit" class="btn btn-primary" data-target="` + field.Target + `">` + html.EscapeString(field.Value) + `</button>`
- result += `</div>`
- result += `</div>`
- }
- }
- }
- result += `</form>`
- return result
- }
|