|
|
|
@ -1,6 +1,8 @@ |
|
|
|
package jdr |
|
|
|
|
|
|
|
import( |
|
|
|
"html/template" |
|
|
|
|
|
|
|
"log" |
|
|
|
"errors" |
|
|
|
"strings" |
|
|
|
@ -13,6 +15,7 @@ var regexp_d = regexp.MustCompile(`^[1-9][0-9]*d([468]|1[02]|20|100)$`) |
|
|
|
type VariableType interface { |
|
|
|
Name() string |
|
|
|
Validate(value string) bool |
|
|
|
ToHTML(value string) (template.HTML, error) |
|
|
|
DefaultValue() string |
|
|
|
} |
|
|
|
|
|
|
|
@ -26,6 +29,10 @@ func (*VariableType_badType) Validate(s string) bool { |
|
|
|
return false |
|
|
|
} |
|
|
|
|
|
|
|
func (*VariableType_badType) ToHTML(value string) (template.HTML, error) { |
|
|
|
return template.HTML(""), errors.New("unknown type") |
|
|
|
} |
|
|
|
|
|
|
|
func (*VariableType_badType) DefaultValue() string { |
|
|
|
return "" |
|
|
|
} |
|
|
|
@ -52,6 +59,21 @@ func (self *VariableType_bool) Validate(value string) bool { |
|
|
|
return err == nil |
|
|
|
} |
|
|
|
|
|
|
|
func (self *VariableType_bool) ToHTML(value string) (template.HTML, error) { |
|
|
|
val, err := self.ToBool(value) |
|
|
|
if err != nil { |
|
|
|
return template.HTML(""), err |
|
|
|
} |
|
|
|
|
|
|
|
ret := `<input type="checkbox"` |
|
|
|
if(val) { |
|
|
|
ret += ` checked` |
|
|
|
} |
|
|
|
ret += `/>` |
|
|
|
|
|
|
|
return template.HTML(ret), nil |
|
|
|
} |
|
|
|
|
|
|
|
func (self *VariableType_bool) DefaultValue() string { |
|
|
|
return "false" |
|
|
|
} |
|
|
|
@ -71,6 +93,16 @@ func (self *VariableType_int) Validate(value string) bool { |
|
|
|
return err == nil |
|
|
|
} |
|
|
|
|
|
|
|
func (self *VariableType_int) ToHTML(value string) (template.HTML, error) { |
|
|
|
val, err := self.ToInt(value) |
|
|
|
if err != nil { |
|
|
|
return template.HTML(""), err |
|
|
|
} |
|
|
|
|
|
|
|
ret := `<input type="number" step="1" value="` + strconv.FormatInt(val, 10) + `"/>` |
|
|
|
return template.HTML(ret), nil |
|
|
|
} |
|
|
|
|
|
|
|
func (self *VariableType_int) DefaultValue() string { |
|
|
|
return "0" |
|
|
|
} |
|
|
|
@ -90,6 +122,17 @@ func (self *VariableType_float) Validate(value string) bool { |
|
|
|
return err == nil |
|
|
|
} |
|
|
|
|
|
|
|
func (self *VariableType_float) ToHTML(value string) (template.HTML, error) { |
|
|
|
val, err := self.ToFloat(value) |
|
|
|
if err != nil { |
|
|
|
return template.HTML(""), err |
|
|
|
} |
|
|
|
|
|
|
|
ret := `<input type="number" value="` + strconv.FormatFloat(val, 'g', -1, 64) + `"/>` |
|
|
|
|
|
|
|
return template.HTML(ret), nil |
|
|
|
} |
|
|
|
|
|
|
|
func (self *VariableType_float) DefaultValue() string { |
|
|
|
return "0.0" |
|
|
|
} |
|
|
|
@ -104,6 +147,11 @@ func (*VariableType_string) Validate(s string) bool { |
|
|
|
return true |
|
|
|
} |
|
|
|
|
|
|
|
func (self *VariableType_string) ToHTML(value string) (template.HTML, error) { |
|
|
|
ret := `<input type="text" value="` + template.HTMLEscapeString(value) + `"/>` |
|
|
|
return template.HTML(ret), nil |
|
|
|
} |
|
|
|
|
|
|
|
func (self *VariableType_string) DefaultValue() string { |
|
|
|
return "" |
|
|
|
} |
|
|
|
@ -118,6 +166,13 @@ func (*VariableType_d) Validate(s string) bool { |
|
|
|
return regexp_d.MatchString(s) |
|
|
|
} |
|
|
|
|
|
|
|
func (self *VariableType_d) ToHTML(value string) (template.HTML, error) { |
|
|
|
//FIXME: non-generic version
|
|
|
|
ret := `<input type="text" value="` + template.HTMLEscapeString(value) +`"/>` |
|
|
|
|
|
|
|
return template.HTML(ret), nil |
|
|
|
} |
|
|
|
|
|
|
|
func (self *VariableType_d) DefaultValue() string { |
|
|
|
//FIXME: non-generic version
|
|
|
|
return "" |
|
|
|
@ -170,6 +225,33 @@ func (self *CustomEnum) Validate(value string) bool { |
|
|
|
return err == nil |
|
|
|
} |
|
|
|
|
|
|
|
func (self *CustomEnum) ToHTML(value string) (template.HTML, error) { |
|
|
|
selectItem := value != "" |
|
|
|
|
|
|
|
value_id := 0 |
|
|
|
if selectItem { |
|
|
|
var err error |
|
|
|
value_id, err = self.ToId(value) |
|
|
|
if err != nil { |
|
|
|
return template.HTML(""), err |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
ret := `<select>` |
|
|
|
for i, v := range(self.Values) { |
|
|
|
ret += `<option` |
|
|
|
if selectItem && i == value_id { |
|
|
|
ret += ` selected` |
|
|
|
} |
|
|
|
ret += `>` |
|
|
|
ret += template.HTMLEscapeString(v) |
|
|
|
ret += `</option>` |
|
|
|
} |
|
|
|
ret += `</select>` |
|
|
|
|
|
|
|
return template.HTML(ret), nil |
|
|
|
} |
|
|
|
|
|
|
|
func (self *CustomEnum) DefaultValue() string { |
|
|
|
return "" |
|
|
|
} |
|
|
|
@ -189,6 +271,11 @@ func (self *CustomStruct) Validate(s string) bool { |
|
|
|
return false |
|
|
|
} |
|
|
|
|
|
|
|
func (self *CustomStruct) ToHTML(value string) (template.HTML, error) { |
|
|
|
//FIXME: implement
|
|
|
|
return template.HTML(""), nil |
|
|
|
} |
|
|
|
|
|
|
|
func (self *CustomStruct) DefaultValue() string { |
|
|
|
//FIXME: non-generic version
|
|
|
|
return "" |
|
|
|
|