diff --git a/templatefunc.go b/templatefunc.go
index a365718d..4c87762f 100644
--- a/templatefunc.go
+++ b/templatefunc.go
@@ -368,23 +368,31 @@ func RenderForm(obj interface{}) template.HTML {
fieldT := objT.Field(i)
- label, name, fType, ignored := parseFormTag(fieldT)
+ label, name, fType, id, class, ignored := parseFormTag(fieldT)
if ignored {
continue
}
- raw = append(raw, renderFormField(label, name, fType, fieldV.Interface()))
+ raw = append(raw, renderFormField(label, name, fType, fieldV.Interface(), id, class))
}
return template.HTML(strings.Join(raw, ""))
}
// renderFormField returns a string containing HTML of a single form field.
-func renderFormField(label, name, fType string, value interface{}) string {
- if isValidForInput(fType) {
- return fmt.Sprintf(`%v`, label, name, fType, value)
+func renderFormField(label, name, fType string, value interface{}, id string, class string) string {
+ if id != "" {
+ id = "id=\"" + id + "\""
}
- return fmt.Sprintf(`%v<%v name="%v">%v%v>`, label, fType, name, value, fType)
+ if class != "" {
+ class = "class=\"" + class + "\""
+ }
+
+ if isValidForInput(fType) {
+ return fmt.Sprintf(`%v`, label, id, class, name, fType, value)
+ }
+
+ return fmt.Sprintf(`%v<%v %v %v name="%v">%v%v>`, label, fType, id, class, name, value, fType)
}
// isValidForInput checks if fType is a valid value for the `type` property of an HTML input element.
@@ -400,12 +408,14 @@ func isValidForInput(fType string) bool {
// parseFormTag takes the stuct-tag of a StructField and parses the `form` value.
// returned are the form label, name-property, type and wether the field should be ignored.
-func parseFormTag(fieldT reflect.StructField) (label, name, fType string, ignored bool) {
+func parseFormTag(fieldT reflect.StructField) (label, name, fType string, id string, class string, ignored bool) {
tags := strings.Split(fieldT.Tag.Get("form"), ",")
label = fieldT.Name + ": "
name = fieldT.Name
fType = "text"
ignored = false
+ id = fieldT.Tag.Get("id")
+ class = fieldT.Tag.Get("class")
switch len(tags) {
case 1: