Implement alert dialog

This commit is contained in:
Anders Pitman 2020-10-12 22:26:33 -06:00
parent 9cc1a8afa6
commit 02f9887b9d
2 changed files with 51 additions and 1 deletions

21
webui/alert.tmpl Normal file
View File

@ -0,0 +1,21 @@
<!doctype html>
<html>
<head>
{{.Head}}
</head>
<body>
<main>
<div class='dialog'>
<p>
{{.Message}}
</p>
<div class='button-row'>
<a href="{{.RedirectUrl}}">
<button class='button green-button'>Ok</button>
</a>
</div>
</div>
</main>
</body>
</html>

View File

@ -33,6 +33,12 @@ type ConfirmData struct {
CancelUrl string
}
type AlertData struct {
Head template.HTML
Message string
RedirectUrl string
}
type LoginData struct {
Head template.HTML
}
@ -310,12 +316,20 @@ func (h *WebUiHandler) users(w http.ResponseWriter, r *http.Request) {
}
username := r.Form["username"][0]
minUsernameLen := 6
if len(username) < minUsernameLen {
w.WriteHeader(400)
errStr := fmt.Sprintf("Username must be at least %d characters", minUsernameLen)
h.alertDialog(w, r, errStr, "/users")
return
}
isAdmin := len(r.Form["is-admin"]) == 1 && r.Form["is-admin"][0] == "on"
err := h.db.AddUser(username, isAdmin)
if err != nil {
w.WriteHeader(500)
io.WriteString(w, err.Error())
h.alertDialog(w, r, err.Error(), "/users")
return
}
@ -379,6 +393,21 @@ func (h *WebUiHandler) deleteUser(w http.ResponseWriter, r *http.Request) {
http.Redirect(w, r, "/users", 303)
}
func (h *WebUiHandler) alertDialog(w http.ResponseWriter, r *http.Request, message, redirectUrl string) error {
tmpl, err := h.loadTemplate("alert.tmpl")
if err != nil {
return err
}
tmpl.Execute(w, &AlertData{
Head: h.headHtml,
Message: message,
RedirectUrl: redirectUrl,
})
return nil
}
func (h *WebUiHandler) loadTemplate(name string) (*template.Template, error) {
tmplStr, err := h.box.String(name)