camper/pkg/form/input.go

72 lines
1.2 KiB
Go

/*
* SPDX-FileCopyrightText: 2023 jordi fita mas <jfita@peritasoft.com>
* SPDX-License-Identifier: AGPL-3.0-only
*/
package form
import (
"database/sql/driver"
"dev.tandem.ws/tandem/camper/pkg/locale"
"net/http"
"strconv"
"strings"
)
type Input struct {
Name string
Val string
Error error
}
func (input *Input) setError(err error) {
input.Error = err
}
func (input *Input) FillValue(r *http.Request) {
input.Val = strings.TrimSpace(r.FormValue(input.Name))
}
func (input *Input) Value() (driver.Value, error) {
return input.Val, nil
}
func (input *Input) Int() int {
i, err := strconv.Atoi(input.Val)
if err != nil {
panic(err)
}
return i
}
func (input *Input) L10nInput() *L10nInput {
return &L10nInput{
Input: Input{
Name: input.Name,
},
Source: input.Val,
}
}
type L10nInput struct {
Input
Source string
}
type I18nInput map[string]*Input
func NewI18nInput(locales locale.Locales, name string) I18nInput {
input := make(I18nInput)
for lang := range locales {
input[lang.String()] = &Input{
Name: name + "." + lang.String(),
}
}
return input
}
func (input I18nInput) FillValue(r *http.Request) {
for _, inner := range input {
inner.FillValue(r)
}
}