Made editform less complex
This commit is contained in:
parent
30955b041c
commit
e178e84f8b
@ -115,6 +115,58 @@ func RenderField(b *bytes.Buffer, v *reflect.Value, field reflect.StructField, i
|
|||||||
|
|
||||||
// String
|
// String
|
||||||
if fieldType == "string" {
|
if fieldType == "string" {
|
||||||
|
renderStringField(b, v, field, idPrefix, fieldValue)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Int
|
||||||
|
if fieldType == "int" {
|
||||||
|
b.WriteString(components.InputNumber(idPrefix+field.Name, float64(fieldValue.Int()), field.Name, field.Tag.Get("tooltip"), "", "", "1"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Float
|
||||||
|
if fieldType == "float64" {
|
||||||
|
b.WriteString(components.InputNumber(idPrefix+field.Name, fieldValue.Float(), field.Name, field.Tag.Get("tooltip"), "", "", ""))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bool
|
||||||
|
if fieldType == "bool" {
|
||||||
|
if field.Name == "IsDraft" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
b.WriteString(components.InputBool(idPrefix+field.Name, fieldValue.Bool(), field.Name, field.Tag.Get("tooltip")))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Array of strings
|
||||||
|
if fieldType == "[]string" {
|
||||||
|
b.WriteString(components.InputTags(idPrefix+field.Name, fieldValue.Interface().([]string), field.Name, field.Tag.Get("tooltip")))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Any kind of array
|
||||||
|
if strings.HasPrefix(fieldType, "[]") {
|
||||||
|
renderSliceField(b, v, field, idPrefix, fieldType, fieldValue)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Any custom field type will be recursively rendered via another RenderObject call
|
||||||
|
b.WriteString(`<div class="widget-section">`)
|
||||||
|
b.WriteString(`<h3 class="widget-title">` + field.Name + `</h3>`)
|
||||||
|
|
||||||
|
// Indent the fields
|
||||||
|
b.WriteString(`<div class="indent">`)
|
||||||
|
RenderObject(b, fieldValue.Interface(), field.Name+".")
|
||||||
|
b.WriteString(`</div>`)
|
||||||
|
|
||||||
|
b.WriteString(`</div>`)
|
||||||
|
}
|
||||||
|
|
||||||
|
// String field
|
||||||
|
func renderStringField(b *bytes.Buffer, v *reflect.Value, field reflect.StructField, idPrefix string, fieldValue reflect.Value) {
|
||||||
idType := field.Tag.Get("idType")
|
idType := field.Tag.Get("idType")
|
||||||
|
|
||||||
// Try to infer the ID type by the field name
|
// Try to infer the ID type by the field name
|
||||||
@ -184,40 +236,10 @@ func RenderField(b *bytes.Buffer, v *reflect.Value, field reflect.StructField, i
|
|||||||
if showPreview {
|
if showPreview {
|
||||||
b.WriteString("</div></div>")
|
b.WriteString("</div></div>")
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return
|
// Slice field
|
||||||
}
|
func renderSliceField(b *bytes.Buffer, v *reflect.Value, field reflect.StructField, idPrefix string, fieldType string, fieldValue reflect.Value) {
|
||||||
|
|
||||||
// Int
|
|
||||||
if fieldType == "int" {
|
|
||||||
b.WriteString(components.InputNumber(idPrefix+field.Name, float64(fieldValue.Int()), field.Name, field.Tag.Get("tooltip"), "", "", "1"))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Float
|
|
||||||
if fieldType == "float64" {
|
|
||||||
b.WriteString(components.InputNumber(idPrefix+field.Name, fieldValue.Float(), field.Name, field.Tag.Get("tooltip"), "", "", ""))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bool
|
|
||||||
if fieldType == "bool" {
|
|
||||||
if field.Name == "IsDraft" {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
b.WriteString(components.InputBool(idPrefix+field.Name, fieldValue.Bool(), field.Name, field.Tag.Get("tooltip")))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Array of strings
|
|
||||||
if fieldType == "[]string" {
|
|
||||||
b.WriteString(components.InputTags(idPrefix+field.Name, fieldValue.Interface().([]string), field.Name, field.Tag.Get("tooltip")))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Any kind of array
|
|
||||||
if strings.HasPrefix(fieldType, "[]") {
|
|
||||||
b.WriteString(`<div class="widget-section">`)
|
b.WriteString(`<div class="widget-section">`)
|
||||||
b.WriteString(`<h3 class="widget-title">`)
|
b.WriteString(`<h3 class="widget-title">`)
|
||||||
b.WriteString(field.Name)
|
b.WriteString(field.Name)
|
||||||
@ -257,19 +279,6 @@ func RenderField(b *bytes.Buffer, v *reflect.Value, field reflect.StructField, i
|
|||||||
b.WriteString(`<button class="action" data-action="arrayAppend" data-trigger="click" data-field="` + field.Name + `">` + utils.Icon("plus") + `Add ` + field.Name + `</button>`)
|
b.WriteString(`<button class="action" data-action="arrayAppend" data-trigger="click" data-field="` + field.Name + `">` + utils.Icon("plus") + `Add ` + field.Name + `</button>`)
|
||||||
b.WriteString(`</div>`)
|
b.WriteString(`</div>`)
|
||||||
|
|
||||||
b.WriteString(`</div>`)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Any custom field type will be recursively rendered via another RenderObject call
|
|
||||||
b.WriteString(`<div class="widget-section">`)
|
|
||||||
b.WriteString(`<h3 class="widget-title">` + field.Name + `</h3>`)
|
|
||||||
|
|
||||||
// Indent the fields
|
|
||||||
b.WriteString(`<div class="indent">`)
|
|
||||||
RenderObject(b, fieldValue.Interface(), field.Name+".")
|
|
||||||
b.WriteString(`</div>`)
|
|
||||||
|
|
||||||
b.WriteString(`</div>`)
|
b.WriteString(`</div>`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user