Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
admpub committed May 25, 2021
1 parent db71c9d commit 5ea7a0e
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 83 deletions.
6 changes: 2 additions & 4 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,8 @@ func (c *Config) hasNameInElements(name string, elements []*Element) bool {
if elem.Type == `langset` {
continue
}
if elem.Elements != nil {
if c.hasNameInElements(name, elem.Elements) {
return true
}
if c.hasNameInElements(name, elem.Elements) {
return true
}
}
return false
Expand Down
8 changes: 3 additions & 5 deletions fieldset.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ package forms
import (
"bytes"
"html/template"
"reflect"
"strconv"
"strings"

Expand Down Expand Up @@ -166,10 +165,9 @@ func (f *FieldSetType) SortAll(sortList ...string) *FieldSetType {
// Elements adds the provided elements to the fieldset.
func (f *FieldSetType) Elements(elems ...conf.FormElement) *FieldSetType {
for _, e := range elems {
t := reflect.TypeOf(e)
switch {
case t.Implements(reflect.TypeOf((*fields.FieldInterface)(nil)).Elem()):
f.addField(e.(fields.FieldInterface))
switch v := e.(type) {
case fields.FieldInterface:
f.addField(v)
}
}
return f
Expand Down
49 changes: 22 additions & 27 deletions forms.go
Original file line number Diff line number Diff line change
Expand Up @@ -461,7 +461,8 @@ func (form *Form) unWindStructure(m interface{}, baseName string) ([]interface{}
f = nil
default:
if t.Field(i).Type.Kind() == reflect.Struct ||
(t.Field(i).Type.Kind() == reflect.Ptr && t.Field(i).Type.Elem().Kind() == reflect.Struct) {
(t.Field(i).Type.Kind() == reflect.Ptr &&
t.Field(i).Type.Elem().Kind() == reflect.Struct) {
fl, fs := form.unWindStructure(v.Field(i).Interface(), fName)
if len(fs) > 0 {
if len(fieldSort) == 0 {
Expand Down Expand Up @@ -579,10 +580,8 @@ func (f *Form) Data() map[string]interface{} {
}

func (f *Form) runBefore() {
if f.beforeRender != nil {
for _, fn := range f.beforeRender {
fn()
}
for _, fn := range f.beforeRender {
fn()
}
}

Expand Down Expand Up @@ -613,16 +612,13 @@ func (f *Form) String() string {
// Elements adds the provided elements to the form.
func (f *Form) Elements(elems ...conf.FormElement) {
for _, e := range elems {
t := reflect.TypeOf(e)
if t.Implements(reflect.TypeOf((*fields.FieldInterface)(nil)).Elem()) {
f.addField(e.(fields.FieldInterface))
continue
}
switch reflect.ValueOf(e).Type().String() {
case "*forms.FieldSetType":
f.addFieldSet(e.(*FieldSetType))
case "*forms.LangSetType":
f.addLangSet(e.(*LangSetType))
switch v := e.(type) {
case fields.FieldInterface:
f.addField(v)
case *FieldSetType:
f.addFieldSet(v)
case *LangSetType:
f.addLangSet(v)
}
}
}
Expand Down Expand Up @@ -731,15 +727,14 @@ func (f *Form) Field(name string) fields.FieldInterface {
if !ok {
return &fields.Field{}
}
t := reflect.TypeOf(f.FieldList[ind])
switch {
case t.Implements(reflect.TypeOf((*fields.FieldInterface)(nil)).Elem()):
return f.FieldList[ind].(fields.FieldInterface)
case t.Implements(reflect.TypeOf((*FieldSetType)(nil)).Elem()):
switch v := f.FieldList[ind].(type) {
case fields.FieldInterface:
return v
case *FieldSetType:
if v, ok := f.ContainerMap[name]; ok {
return f.FieldSet(v).Field(name)
}
case t.Implements(reflect.TypeOf((*LangSetType)(nil)).Elem()):
case *LangSetType:
if v, ok := f.ContainerMap[name]; ok {
return f.LangSet(v).Field(name)
}
Expand All @@ -761,9 +756,9 @@ func (f *Form) LangSet(name string) *LangSetType {
if !ok {
return &LangSetType{}
}
switch reflect.ValueOf(f.FieldList[ind]).Type().String() {
case "*forms.LangSetType":
return f.FieldList[ind].(*LangSetType)
switch v := f.FieldList[ind].(type) {
case *LangSetType:
return v
default:
return &LangSetType{}
}
Expand All @@ -779,9 +774,9 @@ func (f *Form) FieldSet(name string) *FieldSetType {
if !ok {
return &FieldSetType{}
}
switch reflect.ValueOf(f.FieldList[ind]).Type().String() {
case "*forms.FieldSetType":
return f.FieldList[ind].(*FieldSetType)
switch v := f.FieldList[ind].(type) {
case *FieldSetType:
return v
default:
return &FieldSetType{}
}
Expand Down
56 changes: 23 additions & 33 deletions json.go
Original file line number Diff line number Diff line change
Expand Up @@ -156,12 +156,10 @@ func (form *Form) Filter(values url.Values) (url.Values, *validation.ValidationE
for _, ele := range form.config.Elements {
switch ele.Type {
case `langset`, `fieldset`:
if ele.Elements != nil {
for _, e := range ele.Elements {
r, err = form.FilterByElement(values, r, e)
if err != nil {
return r, err
}
for _, e := range ele.Elements {
r, err = form.FilterByElement(values, r, e)
if err != nil {
return r, err
}
}
default:
Expand Down Expand Up @@ -199,11 +197,9 @@ func (form *Form) ValidElements(elements []*conf.Element, t reflect.Type, v refl
case `langset`:
//form.ValidElements(ele.Elements, t, v)
case `fieldset`:
if ele.Elements != nil {
for _, e := range ele.Elements {
if !form.IsIgnored(e.Name) {
form.validElement(e, t, v)
}
for _, e := range ele.Elements {
if !form.IsIgnored(e.Name) {
form.validElement(e, t, v)
}
}
default:
Expand All @@ -215,11 +211,9 @@ func (form *Form) ValidElements(elements []*conf.Element, t reflect.Type, v refl
}

func (form *Form) IsIgnored(fieldName string) bool {
if form.IngoreValid != nil {
for _, name := range form.IngoreValid {
if fieldName == name {
return true
}
for _, name := range form.IngoreValid {
if fieldName == name {
return true
}
}
return false
Expand All @@ -245,17 +239,15 @@ func (form *Form) ParseFromConfig(insertErrors ...bool) *Form {
if len(insertErrors) < 1 || insertErrors[0] {
form.InsertErrors()
}
if r.Attributes != nil {
for _, attr := range r.Attributes {
var k, v string
switch len(attr) {
case 2:
v = attr[1]
fallthrough
case 1:
k = attr[0]
form.SetParam(k, v)
}
for _, attr := range r.Attributes {
var k, v string
switch len(attr) {
case 2:
v = attr[1]
fallthrough
case 1:
k = attr[0]
form.SetParam(k, v)
}
}
if len(r.ID) > 0 {
Expand Down Expand Up @@ -294,12 +286,10 @@ func (form *Form) ParseElements(es ElementSetter, elements []*conf.Element, lang
es.Elements(f)
case `fieldset`:
elems := []fields.FieldInterface{}
if ele.Elements != nil {
for _, e := range ele.Elements {
elem := form.parseElement(e, t, v)
if elem != nil {
elems = append(elems, elem)
}
for _, e := range ele.Elements {
elem := form.parseElement(e, t, v)
if elem != nil {
elems = append(elems, elem)
}
}
f := form.NewFieldSet(ele.Name, form.labelFn(ele.Label), elems...)
Expand Down
30 changes: 16 additions & 14 deletions langset.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ package forms

import (
"bytes"
"reflect"
"strconv"
"strings"

Expand Down Expand Up @@ -182,12 +181,11 @@ func (f *LangSetType) SortAll(sortList ...string) *LangSetType {
// Elements adds the provided elements to the langset.
func (f *LangSetType) Elements(elems ...conf.FormElement) {
for _, e := range elems {
t := reflect.TypeOf(e)
switch {
case t.Implements(reflect.TypeOf((*fields.FieldInterface)(nil)).Elem()):
f.addField(e.(fields.FieldInterface))
case reflect.ValueOf(e).Type().String() == "*forms.FieldSetType":
f.addFieldSet(e.(*FieldSetType))
switch v := e.(type) {
case fields.FieldInterface:
f.addField(v)
case *FieldSetType:
f.addFieldSet(v)
}
}
}
Expand Down Expand Up @@ -284,11 +282,10 @@ func (f *LangSetType) Field(name string) fields.FieldInterface {
if !ok {
return &fields.Field{}
}
t := reflect.TypeOf(field)
switch {
case t.Implements(reflect.TypeOf((*fields.FieldInterface)(nil)).Elem()):
return field.(fields.FieldInterface)
case t.Implements(reflect.TypeOf((*FieldSetType)(nil)).Elem()):
switch v := field.(type) {
case fields.FieldInterface:
return v
case *FieldSetType:
if v, ok := f.ContainerMap[name]; ok {
r := strings.SplitN(name, `:`, 2)
switch len(r) {
Expand All @@ -306,10 +303,15 @@ func (f *LangSetType) Field(name string) fields.FieldInterface {
// param format: "language:name"
func (f *LangSetType) FieldSet(name string) *FieldSetType {
field, ok := f.FieldMap[name]
if !ok || reflect.ValueOf(field).Type().String() != "*forms.FieldSetType" {
if !ok {
return &FieldSetType{}
}
switch v := field.(type) {
case *FieldSetType:
return v
default:
return &FieldSetType{}
}
return field.(*FieldSetType)
}

// NewFieldSet creates and returns a new FieldSetType with the given name and list of fields.
Expand Down

0 comments on commit 5ea7a0e

Please sign in to comment.