/* * SPDX-FileCopyrightText: 2023 jordi fita mas * SPDX-License-Identifier: AGPL-3.0-only */ package form import ( "database/sql/driver" "net/http" "strconv" "strings" "golang.org/x/text/language" "dev.tandem.ws/tandem/camper/pkg/database" "dev.tandem.ws/tandem/camper/pkg/locale" ) 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) } } func (input I18nInput) FillArray(array database.RecordArray) error { for _, el := range array.Elements { tag, err := language.Parse(el.Fields[0].Get().(string)) if err != nil { return err } input[tag.String()].Val = el.Fields[1].Get().(string) } return nil }