data_form.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package builder
  2. import (
  3. "html"
  4. "golang-fave/engine/wrapper"
  5. )
  6. const (
  7. DFKHidden = iota
  8. DFKText
  9. DFKEmail
  10. DFKPassword
  11. DFKTextArea
  12. DFKSubmit
  13. )
  14. type DataFormField struct {
  15. Caption string
  16. Kind int
  17. Name string
  18. Value string
  19. Placeholder string
  20. Hint string
  21. Target string
  22. Required bool
  23. CallBack func(field *DataFormField) string
  24. }
  25. func DataForm(wrap *wrapper.Wrapper, data []DataFormField) string {
  26. result := `<form class="data-form" action="/cp/" method="post" autocomplete="off">`
  27. result += `<div class="hidden">`
  28. for _, field := range data {
  29. if field.Kind == DFKHidden {
  30. if field.CallBack != nil {
  31. result += field.CallBack(&field)
  32. } else {
  33. result += `<input type="hidden" name="` + field.Name + `" value="` + html.EscapeString(field.Value) + `">`
  34. }
  35. }
  36. }
  37. result += `</div>`
  38. for _, field := range data {
  39. if field.Kind != DFKHidden && field.Kind != DFKSubmit {
  40. if field.CallBack != nil {
  41. result += field.CallBack(&field)
  42. } else {
  43. required := ``
  44. if field.Required {
  45. required = ` required`
  46. }
  47. result += `<div class="form-group">`
  48. result += `<div class="row">`
  49. result += `<div class="col-3">`
  50. result += `<label for="lbl_` + field.Name + `">` + field.Caption + `</label>`
  51. result += `</div>`
  52. result += `<div class="col-9">`
  53. result += `<div>`
  54. if field.Kind == DFKText {
  55. 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 + `>`
  56. } else if field.Kind == DFKEmail {
  57. 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 + `>`
  58. } else if field.Kind == DFKPassword {
  59. 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 + `>`
  60. } else if field.Kind == DFKTextArea {
  61. result += `<textarea class="form-control" id="lbl_` + field.Name + `" name="` + field.Name + `" placeholder="` + field.Placeholder + `" autocomplete="off"` + required + `>` + html.EscapeString(field.Value) + `</textarea>`
  62. }
  63. result += `</div>`
  64. if field.Hint != "" {
  65. result += `<div><small>` + field.Hint + `</small></div>`
  66. }
  67. result += `</div>`
  68. result += `</div>`
  69. result += `</div>`
  70. }
  71. }
  72. }
  73. for _, field := range data {
  74. if field.Kind == DFKSubmit {
  75. if field.CallBack != nil {
  76. result += field.CallBack(&field)
  77. } else {
  78. result += `<div class="row hidden">`
  79. result += `<div class="col-3">`
  80. result += `&nbsp;`
  81. result += `</div>`
  82. result += `<div class="col-9">`
  83. result += `<button type="submit" class="btn btn-primary" data-target="` + field.Target + `">` + html.EscapeString(field.Value) + `</button>`
  84. result += `</div>`
  85. result += `</div>`
  86. }
  87. }
  88. }
  89. result += `</form>`
  90. return result
  91. }