1
0
mirror of https://github.com/volatiletech/authboss.git synced 2025-01-26 05:27:33 +02:00
authboss/html_data.go

69 lines
1.7 KiB
Go
Raw Normal View History

package authboss
// Keys for use in HTMLData that are meaningful
const (
// DataErr is for one off errors that don't really belong to
// a particular field
DataErr = "error"
// DataValidation is for validation errors
DataValidation = "errors"
// DataPreserve preserves fields
DataPreserve = "preserve"
2018-04-30 18:21:56 -07:00
// DataModules contains a map[string]Moduler of which modules are loaded
// the Init() method should NEVER be called in a template. This structure
// is only returned to avoid allocations.
DataModules = "modules"
)
// HTMLData is used to render templates with.
type HTMLData map[string]interface{}
// NewHTMLData creates HTMLData from key-value pairs. The input is a key-value
// slice, where odd elements are keys, and the following even element is their value.
func NewHTMLData(data ...interface{}) HTMLData {
if len(data)%2 != 0 {
panic("it should be a key value list of arguments.")
}
h := make(HTMLData)
for i := 0; i < len(data)-1; i += 2 {
k, ok := data[i].(string)
if !ok {
panic("Keys must be strings.")
}
h[k] = data[i+1]
}
return h
}
// Merge adds the data from other to h. If there are conflicting keys
// they are overwritten by other's values.
func (h HTMLData) Merge(other HTMLData) HTMLData {
for k, v := range other {
h[k] = v
}
return h
}
// MergeKV adds extra key-values to the HTMLData. The input is a key-value
// slice, where odd elements are keys, and the following even element is their value.
func (h HTMLData) MergeKV(data ...interface{}) HTMLData {
if len(data)%2 != 0 {
panic("It should be a key value list of arguments.")
}
for i := 0; i < len(data)-1; i += 2 {
k, ok := data[i].(string)
if !ok {
panic("Keys must be strings.")
}
2015-02-19 14:50:14 -08:00
h[k] = data[i+1]
}
return h
}