X-Git-Url: https://gerrit.akraino.org/r/gitweb?a=blobdiff_plain;f=src%2Ffoundation%2Fapi%2Frevel%2Ffield.go;fp=src%2Ffoundation%2Fapi%2Frevel%2Ffield.go;h=93f2b1c5f78d8b0aa502547777a9d93d4e718d08;hb=1d1ee6961c93781e1187d8c7faa868da6b2f01f4;hp=0000000000000000000000000000000000000000;hpb=56dd5e0f2164b37b40ac1daa188ccc618b4cbd19;p=iec.git diff --git a/src/foundation/api/revel/field.go b/src/foundation/api/revel/field.go new file mode 100644 index 0000000..93f2b1c --- /dev/null +++ b/src/foundation/api/revel/field.go @@ -0,0 +1,108 @@ +// Copyright (c) 2012-2016 The Revel Framework Authors, All rights reserved. +// Revel Framework source code and usage is governed by a MIT style +// license that can be found in the LICENSE file. + +package revel + +import ( + "reflect" + "strings" +) + +// Field represents a data field that may be collected in a web form. +type Field struct { + Name string + Error *ValidationError + viewArgs map[string]interface{} + controller *Controller +} + +func NewField(name string, viewArgs map[string]interface{}) *Field { + err, _ := viewArgs["errors"].(map[string]*ValidationError)[name] + controller, _ := viewArgs["_controller"].(*Controller) + return &Field{ + Name: name, + Error: err, + viewArgs: viewArgs, + controller: controller, + } +} + +// ID returns an identifier suitable for use as an HTML id. +func (f *Field) ID() string { + return strings.Replace(f.Name, ".", "_", -1) +} + +// Flash returns the flashed value of this Field. +func (f *Field) Flash() string { + v, _ := f.viewArgs["flash"].(map[string]string)[f.Name] + return v +} + +// Options returns the option list of this Field. +func (f *Field) Options() []string { + if f.viewArgs["options"] == nil { + return nil + } + v, _ := f.viewArgs["options"].(map[string][]string)[f.Name] + return v +} + +// FlashArray returns the flashed value of this Field as a list split on comma. +func (f *Field) FlashArray() []string { + v := f.Flash() + if v == "" { + return []string{} + } + return strings.Split(v, ",") +} + +// Value returns the current value of this Field. +func (f *Field) Value() interface{} { + pieces := strings.Split(f.Name, ".") + answer, ok := f.viewArgs[pieces[0]] + if !ok { + return "" + } + + val := reflect.ValueOf(answer) + for i := 1; i < len(pieces); i++ { + if val.Kind() == reflect.Ptr { + val = val.Elem() + } + val = val.FieldByName(pieces[i]) + if !val.IsValid() { + return "" + } + } + + return val.Interface() +} + +// ErrorClass returns ErrorCSSClass if this field has a validation error, else empty string. +func (f *Field) ErrorClass() string { + if f.Error != nil { + if errorClass, ok := f.viewArgs["ERROR_CLASS"]; ok { + return errorClass.(string) + } + return ErrorCSSClass + } + return "" +} + +// Get the short name and translate it +func (f *Field) ShortName() string { + name := f.Name + if i := strings.LastIndex(name, "."); i > 0 { + name = name[i+1:] + } + return f.Translate(name) +} + +// Translate the text +func (f *Field) Translate(text string, args ...interface{}) string { + if f.controller != nil { + text = f.controller.Message(text, args...) + } + return text +}