diff --git a/web/handlers/http.go b/web/handlers/http.go index d5c7f23..ed6fefd 100644 --- a/web/handlers/http.go +++ b/web/handlers/http.go @@ -3,11 +3,11 @@ package handlers import ( + "bytes" "fmt" "html/template" "net/http" "net/url" - "strings" "time" "github.com/go-kit/kit/log/level" @@ -130,32 +130,26 @@ func New( }), render.InjectTemplateFunc("list_languages", func(r *http.Request) interface{} { - csrfElement := csrf.TemplateField(r) - - createFormElement := func(postRoute, tag, translation, classList string) string { - return fmt.Sprintf(` -
- %s - - - -
- `, postRoute, csrfElement, tag, r.RequestURI, translation, classList) - } - return func(postRoute *url.URL, classList string) template.HTML { + return func(postRoute *url.URL, classList string) (template.HTML, error) { languages := locHelper.ListLanguages() - languageOptions := make([]string, len(languages)) + var buf bytes.Buffer + for _, entry := range languages { - languageOptions = append(languageOptions, createFormElement(postRoute.String(), entry.Tag, entry.Translation, classList)) + data := changeLanguageTemplateData{ + PostRoute: postRoute.String(), + CSRFElement: csrf.TemplateField(r), + LangTag: entry.Tag, + RedirectPage: r.RequestURI, + Translation: entry.Translation, + ClassList: classList, + } + err = changeLanguageTemplate.Execute(&buf, data) + if err != nil { + return "", fmt.Errorf("Error while executing change language template: %w", err) + } } - return (template.HTML)(strings.Join(languageOptions, "\n")) + + return (template.HTML)(buf.String()), nil } }), diff --git a/web/handlers/language_template.go b/web/handlers/language_template.go new file mode 100644 index 0000000..d67faf4 --- /dev/null +++ b/web/handlers/language_template.go @@ -0,0 +1,27 @@ +package handlers + +import "html/template" + +type changeLanguageTemplateData struct { + PostRoute string + CSRFElement template.HTML + LangTag string + RedirectPage string + Translation string + ClassList string +} + +var changeLanguageTemplate = template.Must(template.New("changeLanguageForm").Parse(` +
+ {{ .CSRFElement }} + + + +
`))