data_form.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package builder
  2. import (
  3. "html"
  4. "golang-fave/engine/wrapper"
  5. "golang-fave/utils"
  6. )
  7. const (
  8. DFKHidden = iota
  9. DFKText
  10. DFKEmail
  11. DFKPassword
  12. DFKTextArea
  13. DFKCheckBox
  14. DFKSubmit
  15. DFKMessage
  16. )
  17. type DataFormField struct {
  18. Caption string
  19. Kind int
  20. Name string
  21. Value string
  22. Placeholder string
  23. Hint string
  24. Target string
  25. Required bool
  26. Classes string
  27. CallBack func(field *DataFormField) string
  28. }
  29. func DataForm(wrap *wrapper.Wrapper, data []DataFormField) string {
  30. var html_hidden string
  31. var html_element string
  32. var html_message string
  33. var html_button string
  34. for i, field := range data {
  35. if field.Kind == DFKHidden {
  36. if field.CallBack != nil {
  37. html_hidden += field.CallBack(&field)
  38. } else {
  39. html_hidden += `<input type="hidden" name="` + field.Name + `" value="` + html.EscapeString(field.Value) + `">`
  40. }
  41. } else if field.Kind != DFKHidden && field.Kind != DFKSubmit && field.Kind != DFKMessage {
  42. if field.CallBack != nil {
  43. html_element += field.CallBack(&field)
  44. } else {
  45. required := ``
  46. if field.Required {
  47. required = ` required`
  48. }
  49. classes := field.Classes
  50. if classes != "" {
  51. classes = " " + classes
  52. }
  53. html_element += `<div class="form-group n` + utils.IntToStr(i) + `">`
  54. html_element += `<div class="row">`
  55. html_element += `<div class="col-md-3">`
  56. if field.Kind != DFKCheckBox {
  57. html_element += `<label for="lbl_` + field.Name + `">` + field.Caption + `</label>`
  58. } else {
  59. html_element += `<label>` + field.Caption + `</label>`
  60. }
  61. html_element += `</div>`
  62. html_element += `<div class="col-md-9">`
  63. html_element += `<div>`
  64. if field.Kind == DFKText {
  65. html_element += `<input class="form-control` + classes + `" type="text" id="lbl_` + field.Name + `" name="` + field.Name + `" value="` + html.EscapeString(field.Value) + `" placeholder="` + field.Placeholder + `" autocomplete="off"` + required + `>`
  66. } else if field.Kind == DFKEmail {
  67. html_element += `<input class="form-control` + classes + `" type="email" id="lbl_` + field.Name + `" name="` + field.Name + `" value="` + html.EscapeString(field.Value) + `" placeholder="` + field.Placeholder + `" autocomplete="off"` + required + `>`
  68. } else if field.Kind == DFKPassword {
  69. html_element += `<input class="form-control` + classes + `" type="password" id="lbl_` + field.Name + `" name="` + field.Name + `" value="` + html.EscapeString(field.Value) + `" placeholder="` + field.Placeholder + `" autocomplete="off"` + required + `>`
  70. } else if field.Kind == DFKTextArea {
  71. html_element += `<textarea class="form-control` + classes + `" id="lbl_` + field.Name + `" name="` + field.Name + `" placeholder="` + field.Placeholder + `" autocomplete="off"` + required + `>` + html.EscapeString(field.Value) + `</textarea>`
  72. } else if field.Kind == DFKCheckBox {
  73. checked := ""
  74. if field.Value != "0" {
  75. checked = " checked"
  76. }
  77. html_element += `<div class="checkbox-ios"><input class="form-control` + classes + `" type="checkbox" id="lbl_` + field.Name + `" name="` + field.Name + `" value="1"` + `" autocomplete="off"` + required + checked + `><label for="lbl_` + field.Name + `"></label></div>`
  78. }
  79. html_element += `</div>`
  80. if field.Hint != "" {
  81. html_element += `<div><small>` + field.Hint + `</small></div>`
  82. }
  83. html_element += `</div>`
  84. html_element += `</div>`
  85. html_element += `</div>`
  86. }
  87. } else if field.Kind == DFKMessage {
  88. if field.CallBack != nil {
  89. html_message += field.CallBack(&field)
  90. } else {
  91. html_message += `<div class="row">`
  92. html_message += `<div class="col-md-3">`
  93. html_message += `</div>`
  94. html_message += `<div class="col-md-9">`
  95. html_message += `<div class="sys-messages"></div>`
  96. html_message += `</div>`
  97. html_message += `</div>`
  98. }
  99. } else if field.Kind == DFKSubmit {
  100. if field.CallBack != nil {
  101. html_button += field.CallBack(&field)
  102. } else {
  103. html_button += `<div class="row d-lg-none">`
  104. html_button += `<div class="col-md-3 d-none d-md-block">`
  105. html_button += `&nbsp;`
  106. html_button += `</div>`
  107. html_button += `<div class="col-md-9">`
  108. html_button += `<button type="submit" class="btn btn-primary" data-target="` + field.Target + `">` + html.EscapeString(field.Value) + `</button>`
  109. html_button += `</div>`
  110. html_button += `</div>`
  111. }
  112. }
  113. }
  114. if html_hidden != "" {
  115. html_hidden = `<div class="hidden">` + html_hidden + `</div>`
  116. }
  117. return `<form class="data-form ` + wrap.CurrModule + `-` + wrap.CurrSubModule + ` prev-data-lost" action="/cp/" method="post" autocomplete="off">` +
  118. html_hidden + html_element + html_message + html_button + `</form>`
  119. }