forms

package
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 28, 2023 License: MIT Imports: 13 Imported by: 1

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrRequired = errors.New("required")

Functions

func JoinNames added in v0.2.0

func JoinNames(path ...string) string

func SplitName added in v0.2.0

func SplitName(name string) []string

Types

type AnyBinding

type AnyBinding interface {
	Init(errs ErrorSite)
}

type Binding

type Binding[T any] struct {
	Value      T
	Setter     func(value T) error
	Validators []Validator[T]
	ErrSite    ErrorSite
	Child      AnyBinding
}

func BindMapKey added in v0.2.0

func BindMapKey[T any, K comparable](m map[K]T, key K) *Binding[T]

func BindNot added in v0.2.0

func BindNot(b *Binding[bool]) *Binding[bool]

func BindSliceContainsEl added in v0.2.0

func BindSliceContainsEl[T comparable](b *Binding[[]T], el T) *Binding[bool]

func BindSliceEmptyOrSingle added in v0.2.0

func BindSliceEmptyOrSingle[T comparable](b *Binding[[]T], emptyValue T) *Binding[T]

func Const

func Const[T any](value T) *Binding[T]

func Convert

func Convert[T, S any](b *Binding[S], stringer func(S) T, convert func(T) (S, error)) *Binding[T]

func Int64AsString added in v0.2.0

func Int64AsString(b *Binding[int64], opts ...any) *Binding[string]

func IntAsString added in v0.2.0

func IntAsString(b *Binding[int], opts ...any) *Binding[string]

func Var

func Var[T any](ptr *T) *Binding[T]

func (*Binding[T]) AsString

func (b *Binding[T]) AsString(stringer func(T) string, convert func(string) (T, error)) *Binding[string]

func (*Binding[T]) EnumBindings

func (b *Binding[T]) EnumBindings(f func(AnyBinding))

EnumBindings in Binding simplifies implementation of Processors that embed a Binding.

func (*Binding[T]) Init

func (b *Binding[T]) Init(errs ErrorSite)

func (*Binding[T]) Set

func (b *Binding[T]) Set(value T)

func (*Binding[T]) SetString

func (b *Binding[T]) SetString(str string, convert func(string) (T, error))

func (*Binding[T]) Validate

func (b *Binding[T]) Validate(validators ...Validator[T]) *Binding[T]

type Button

type Button struct {
	Template
	TemplateStyle
	Identity
	TagOpts
	Action     string
	FullAction string
	Activated  bool
	Title      string
}

func (Button) DefaultTemplate

func (Button) DefaultTemplate() string

func (*Button) EnumBindings

func (c *Button) EnumBindings(f func(AnyBinding))

func (*Button) Finalize

func (c *Button) Finalize(state *State)

func (*Button) Process

func (c *Button) Process(fd *FormData)

type Checkbox

type Checkbox struct {
	Template
	TemplateStyle
	Field
	TagOpts
	*Binding[bool]
}

func (Checkbox) DefaultTemplate

func (Checkbox) DefaultTemplate() string

func (*Checkbox) Finalize

func (c *Checkbox) Finalize(state *State)

func (*Checkbox) Process

func (c *Checkbox) Process(*FormData)

type Child

type Child interface {
	Finalize(state *State)
}

type Children

type Children []Child

func (*Children) Add added in v0.2.0

func (cc *Children) Add(c Child)

func (Children) EnumChildren

func (cc Children) EnumChildren(f func(Child))

func (Children) Finalize

func (cc Children) Finalize(state *State)

type Container

type Container interface {
	Child
	EnumChildren(f func(Child))
}

type ErrorSite

type ErrorSite interface {
	AddError(err error)
	NoteChildError()
	Invalid() bool
	Init(parent ErrorSite)
}

type Field

type Field struct {
	Identity

	RawFormValue        string
	RawFormValues       []string
	RawFormValuePresent bool
}

func (*Field) EnumFields

func (field *Field) EnumFields(f func(*Field))

type FileUpload

type FileUpload[T any] struct {
	Template
	TemplateStyle
	Field
	*Binding[T]

	Required bool

	ButtonTitle string
	ButtonTag   TagOpts

	Handler func(file *multipart.FileHeader) (T, error)
}

func (FileUpload[T]) DefaultTemplate

func (FileUpload[T]) DefaultTemplate() string

func (*FileUpload[T]) Finalize

func (c *FileUpload[T]) Finalize(state *State)

func (*FileUpload[T]) Process

func (c *FileUpload[T]) Process(data *FormData)

type Form

type Form struct {
	Multipart bool
	URL       string
	Group

	Action string
	// contains filtered or unexported fields
}

func (*Form) Process

func (form *Form) Process(data *FormData) bool

func (*Form) ProcessRequest

func (form *Form) ProcessRequest(r *http.Request) bool

func (*Form) Render

func (form *Form) Render(r *Renderer) template.HTML

type FormData

type FormData struct {
	Action string
	Values url.Values
	Files  map[string][]*multipart.FileHeader
}

type FreeButton

type FreeButton struct {
	Template
	TemplateStyle
	Field
	TagOpts
	FullAction string
	Value      string
	Title      string
}

func (FreeButton) DefaultTemplate

func (FreeButton) DefaultTemplate() string

func (*FreeButton) EnumBindings

func (c *FreeButton) EnumBindings(f func(AnyBinding))

func (*FreeButton) Finalize

func (c *FreeButton) Finalize(state *State)

type Group

type Group struct {
	Name       string
	Title      string
	WrapperTag TagOpts
	Styles     []*Style
	Template   string
	TemplateStyle
	Options  any
	Children Children
	MultiErrorSite

	Form *Form

	InnerHTML template.HTML
	// contains filtered or unexported fields
}

func (*Group) EnumChildren

func (group *Group) EnumChildren(f func(Child))

func (*Group) Finalize

func (group *Group) Finalize(state *State)

func (*Group) RenderInto

func (group *Group) RenderInto(buf *strings.Builder, r *Renderer)
type Header struct {
	Template
	TemplateStyle
	TagOpts
	Text string
}

func (Header) DefaultTemplate

func (Header) DefaultTemplate() string

func (Header) Finalize

func (Header) Finalize(state *State)

type Identity

type Identity struct {
	ID       string
	FullName string
}

type Image

type Image struct {
	Template
	TemplateStyle
	TagOpts
	Src string
}

func (Image) DefaultTemplate

func (Image) DefaultTemplate() string

func (Image) Finalize

func (Image) Finalize(state *State)

type InputFloat64

type InputFloat64 struct {
	Template
	TemplateStyle
	Field
	TagOpts
	*Binding[float64]
	InputWellOpts
	Min       float64
	Max       float64
	HasMin    bool
	HasMax    bool
	Precision int
}

func (InputFloat64) DefaultTemplate

func (InputFloat64) DefaultTemplate() string

func (*InputFloat64) Finalize

func (c *InputFloat64) Finalize(state *State)

func (*InputFloat64) Process

func (c *InputFloat64) Process(*FormData)

type InputInt

type InputInt struct {
	Template
	TemplateStyle
	Field
	TagOpts
	*Binding[int]
	InputWellOpts
	Min    int
	Max    int
	Step   int
	HasMin bool
	HasMax bool
}

func (InputInt) DefaultTemplate

func (InputInt) DefaultTemplate() string

func (*InputInt) Finalize

func (c *InputInt) Finalize(state *State)

func (*InputInt) Process

func (c *InputInt) Process(*FormData)

type InputInt64

type InputInt64 struct {
	Template
	TemplateStyle
	Field
	TagOpts
	*Binding[int64]
	InputWellOpts
	Min    int64
	Max    int64
	HasMin bool
	HasMax bool
	Step   int64
}

func (InputInt64) DefaultTemplate

func (InputInt64) DefaultTemplate() string

func (*InputInt64) Finalize

func (c *InputInt64) Finalize(state *State)

func (*InputInt64) Process

func (c *InputInt64) Process(*FormData)

type InputText

type InputText struct {
	Template
	TemplateStyle
	Field
	TagOpts
	*Binding[string]

	Required    bool
	MinLen      int
	MaxLen      int
	Placeholder string
}

func (InputText) DefaultTemplate

func (InputText) DefaultTemplate() string

func (*InputText) Finalize

func (c *InputText) Finalize(state *State)

func (*InputText) Process

func (c *InputText) Process(*FormData)

type InputTime added in v0.2.0

type InputTime struct {
	Template
	TemplateStyle
	Field
	TagOpts
	*Binding[time.Time]
	InputWellOpts
	Min      time.Time
	Max      time.Time
	Location *time.Location
}

func (InputTime) DefaultTemplate added in v0.2.0

func (InputTime) DefaultTemplate() string

func (*InputTime) Finalize added in v0.2.0

func (c *InputTime) Finalize(state *State)

func (*InputTime) FormattedValue added in v0.2.0

func (c *InputTime) FormattedValue() string

func (*InputTime) Process added in v0.2.0

func (c *InputTime) Process(*FormData)

type InputWellOpts

type InputWellOpts struct {
	LeftLabel     string
	LeftLabelTag  TagOpts
	RightLabel    string
	RightLabelTag TagOpts
}

type Item

type Item struct {
	Name string
	Identity

	Label    string
	LabelTag TagOpts
	ItemTag  TagOpts
	Styles   []*Style
	Template string
	TemplateStyle
	SingleErrorSite

	Child     Child
	Extra     Child
	InnerHTML template.HTML
	ExtraHTML template.HTML
}

func (*Item) EnumChildren

func (item *Item) EnumChildren(f func(Child))

func (*Item) Finalize

func (item *Item) Finalize(state *State)

func (*Item) RenderInto

func (item *Item) RenderInto(buf *strings.Builder, r *Renderer)
type Link struct {
	Template
	TemplateStyle
	TagOpts
	Link string
}

func (Link) DefaultTemplate

func (Link) DefaultTemplate() string

func (Link) Finalize

func (Link) Finalize(state *State)

type List added in v0.2.0

type List[T any] struct {
	Name     string
	Template string
	TemplateStyle
	Identity
	Styles     []*Style
	WrapperTag TagOpts
	*Binding[[]T]

	MinCount int
	MaxCount int

	NewItem    func(name, typ string) (T, bool)
	DeleteItem func(item T)
	ItemName   func(item T) string
	ItemType   func(item T) string
	RenderItem func(item T) *Group
	Sort       func(items []T)
	Empty      Child
	TopArea    func() Children
	BottomArea func() Children

	InnerHTML template.HTML
	// contains filtered or unexported fields
}

func (*List[T]) DefaultTemplate added in v0.2.0

func (*List[T]) DefaultTemplate() string

func (*List[T]) EnumChildren added in v0.2.0

func (list *List[T]) EnumChildren(f func(Child))

func (*List[T]) EnumFields added in v0.2.0

func (*List[T]) EnumFields(f func(*Field))

func (*List[T]) Finalize added in v0.2.0

func (list *List[T]) Finalize(state *State)

func (*List[T]) FullItemName added in v0.2.0

func (list *List[T]) FullItemName(item T) string

func (*List[T]) Process added in v0.2.0

func (list *List[T]) Process(fd *FormData)

func (*List[T]) RenderInto added in v0.2.0

func (list *List[T]) RenderInto(buf *strings.Builder, r *Renderer)

func (*List[T]) SplitFullItemName added in v0.2.0

func (list *List[T]) SplitFullItemName(fullName string) (name, typ string)

type MultiErrorSite

type MultiErrorSite struct {
	Errors          []error
	ParentErrorSite ErrorSite
	ErrCount        int
	CaptureErrors   bool
}

func (*MultiErrorSite) AddError

func (errs *MultiErrorSite) AddError(err error)

func (*MultiErrorSite) Init

func (errs *MultiErrorSite) Init(parent ErrorSite)

func (*MultiErrorSite) Invalid

func (errs *MultiErrorSite) Invalid() bool

func (*MultiErrorSite) NoteChildError

func (errs *MultiErrorSite) NoteChildError()

type Option added in v0.2.0

type Option[T comparable] struct {
	ModelValue T
	HTMLValue  string
	Label      string
}

type Processor

type Processor interface {
	Child
	EnumFields(f func(*Field))
	EnumBindings(f func(AnyBinding))
	Process(data *FormData)
}

type Renderable

type Renderable interface {
	Child
	RenderInto(buf *strings.Builder, r *Renderer)
}

type Renderer

type Renderer struct {
	Exec func(w io.Writer, templateName string, data any) error
}

func (*Renderer) Render

func (r *Renderer) Render(item any) template.HTML

func (*Renderer) RenderInto

func (r *Renderer) RenderInto(buf *strings.Builder, item any)

func (*Renderer) RenderTemplateInto

func (r *Renderer) RenderTemplateInto(buf *strings.Builder, templ string, data any)

func (*Renderer) RenderWrapperTemplateInto

func (r *Renderer) RenderWrapperTemplateInto(buf *strings.Builder, templ string, data any, raw template.HTML)

type Select added in v0.2.0

type Select[T comparable] struct {
	Template
	TemplateStyle
	Field
	TagOpts
	*Binding[T]

	Required bool
	Options  []*Option[T]
}

func (Select[T]) DefaultTemplate added in v0.2.0

func (Select[T]) DefaultTemplate() string

func (*Select[T]) Finalize added in v0.2.0

func (c *Select[T]) Finalize(state *State)

func (*Select[T]) OptionByHTMLValue added in v0.2.0

func (c *Select[T]) OptionByHTMLValue(value string) *Option[T]

func (*Select[T]) OptionByModelValue added in v0.2.0

func (c *Select[T]) OptionByModelValue(value T) *Option[T]

func (*Select[T]) Process added in v0.2.0

func (c *Select[T]) Process(*FormData)

type SingleErrorSite

type SingleErrorSite struct {
	Error           error
	ParentErrorSite ErrorSite
	ErrCount        int
}

func (*SingleErrorSite) AddError

func (errs *SingleErrorSite) AddError(err error)

func (*SingleErrorSite) Init

func (errs *SingleErrorSite) Init(parent ErrorSite)

func (*SingleErrorSite) Invalid

func (errs *SingleErrorSite) Invalid() bool

func (*SingleErrorSite) NoteChildError

func (errs *SingleErrorSite) NoteChildError()

type SpecialValue added in v0.2.0

type SpecialValue[T comparable] struct {
	ModelValue    T
	PostbackValue string
}

type State

type State struct {
	Data *FormData
	// contains filtered or unexported fields
}

func (*State) AddField

func (st *State) AddField(field *Field)

func (*State) AssignIdentity

func (st *State) AssignIdentity(ident *Identity)

func (*State) Classes

func (st *State) Classes() map[string]string

func (*State) ErrorSite

func (st *State) ErrorSite() ErrorSite

func (*State) Fin

func (st *State) Fin()

func (*State) LookupTemplate

func (st *State) LookupTemplate(templ string) string

func (*State) PushClass

func (st *State) PushClass(key string, value string)

func (*State) PushClasses

func (st *State) PushClasses(newClasses map[string]string)

func (*State) PushErrorSite

func (st *State) PushErrorSite(errs ErrorSite)

func (*State) PushName

func (st *State) PushName(name string)

func (*State) PushStyle

func (st *State) PushStyle(s *Style)

func (*State) PushStyles

func (st *State) PushStyles(styles []*Style)

func (*State) PushTemplate

func (st *State) PushTemplate(forTempl, useTempl string)

func (*State) PushTemplates

func (st *State) PushTemplates(substs []Subst)

func (*State) TemplateStyle

func (st *State) TemplateStyle() TemplateStyle

type Style

type Style struct {
	Templates []Subst
	Classes   map[string]string
}

type Subst

type Subst struct {
	For string
	Use string
}

type TagOpts

type TagOpts struct {
	Class string
	Attrs map[string]any
}

type Template

type Template string

func (Template) CurrentTemplate

func (t Template) CurrentTemplate() string

type TemplateStyle

type TemplateStyle struct {
	Classes map[string]string
}

func (*TemplateStyle) TemplateStylePtr

func (ts *TemplateStyle) TemplateStylePtr() *TemplateStyle

type Templated

type Templated interface {
	Child
	TemplateStylePtr() *TemplateStyle
	CurrentTemplate() string
	DefaultTemplate() string
}

type Text

type Text struct {
	Template
	TemplateStyle
	TagOpts
	Text string
}

func (Text) DefaultTemplate

func (Text) DefaultTemplate() string

func (Text) Finalize

func (Text) Finalize(state *State)

type Validator

type Validator[T any] func(value T) (T, error)

type Value

type Value struct {
	Key   string
	Value any
}

type Wrapper

type Wrapper struct {
	WrapperTag TagOpts
	Template   string
	TemplateStyle
	Child     Child
	InnerHTML template.HTML
}

func (*Wrapper) EnumChildren

func (wrapper *Wrapper) EnumChildren(f func(Child))

func (*Wrapper) Finalize

func (wrapper *Wrapper) Finalize(state *State)

func (*Wrapper) RenderInto

func (wrapper *Wrapper) RenderInto(buf *strings.Builder, r *Renderer)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL