diff options
author | Přemysl Janouch <p@janouch.name> | 2019-04-22 12:03:36 +0200 |
---|---|---|
committer | Přemysl Janouch <p@janouch.name> | 2019-04-22 13:55:07 +0200 |
commit | 88560a8fbf6d0c8bac45a07c29bd4ab23b50968b (patch) | |
tree | 503729d985e62e5e6a2db52775fdd071095fa6a3 | |
parent | 301d0354255ae1fc8255126ef5c35fd55cf97721 (diff) | |
download | sklad-88560a8fbf6d0c8bac45a07c29bd4ab23b50968b.tar.gz sklad-88560a8fbf6d0c8bac45a07c29bd4ab23b50968b.tar.xz sklad-88560a8fbf6d0c8bac45a07c29bd4ab23b50968b.zip |
sklad: prefill form with last values on error
Since the browser's back button cannot be used because of our
fascist caching policy.
-rw-r--r-- | cmd/sklad/container.tmpl | 23 | ||||
-rw-r--r-- | cmd/sklad/main.go | 30 |
2 files changed, 34 insertions, 19 deletions
diff --git a/cmd/sklad/container.tmpl b/cmd/sklad/container.tmpl index 7fa1654..479174c 100644 --- a/cmd/sklad/container.tmpl +++ b/cmd/sklad/container.tmpl @@ -36,18 +36,19 @@ </form> </header> <form method=post action="container?id={{ .Container.Id }}"> - <textarea name=description - rows="{{ max 5 (lines .Container.Description) }}" + {{- $description := or .NewDescription .Container.Description }} + <textarea name=description rows="{{ max 5 (lines $description) }}" placeholder="Popis obalu nebo jeho obsahu"> - {{- .Container.Description -}} + {{- $description -}} </textarea> <footer> <div> <label for=series>Řada:</label> <select name=series id=series> + {{- $preselect := or .NewSeries .Container.Series }} {{- range $prefix, $desc := .AllSeries }} <option value="{{ $prefix }}" - {{ if eq $prefix $.Container.Series }}selected{{ end -}} + {{ if eq $prefix $preselect }}selected{{ end -}} >{{ $prefix }} — {{ $desc }}</option> {{- end }} </select> @@ -55,7 +56,7 @@ <div> <label for=parent>Nadobal:</label> <input type=text name=parent id=parent - value="{{ .Container.Parent }}"> + value="{{ or .NewParent .Container.Parent }}"> </div> <input type=submit value="Uložit"> </footer> @@ -69,21 +70,27 @@ <h2>Nový obal</h2> </header> <form method=post action="container"> - <textarea name=description rows=5 - placeholder="Popis obalu nebo jeho obsahu"></textarea> + {{- $description := or .NewDescription "" }} + <textarea name=description rows="{{ max 5 (lines $description) }}" + placeholder="Popis obalu nebo jeho obsahu"> + {{- $description -}} + </textarea> <footer> <div> <label for=series>Řada:</label> <select name=series id=series> + {{- $preselect := or .NewSeries "" }} {{- range $prefix, $desc := .AllSeries }} <option value="{{ $prefix }}" + {{ if eq $prefix $preselect }}selected{{ end -}} >{{ $prefix }} — {{ $desc }}</option> {{- end }} </select> </div> <div> <label for=parent>Nadobal:</label> - <input type=text name=parent id=parent value=""> + <input type=text name=parent id=parent + value="{{ or .NewParent "" }}"> </div> <input type=submit value="Uložit"> </footer> diff --git a/cmd/sklad/main.go b/cmd/sklad/main.go index 52cbee5..4808713 100644 --- a/cmd/sklad/main.go +++ b/cmd/sklad/main.go @@ -123,7 +123,6 @@ func handleContainer(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, redirect, http.StatusSeeOther) return } - // TODO: Use the last data as a prefill. } else if r.Method != http.MethodGet { w.WriteHeader(http.StatusMethodNotAllowed) return @@ -134,14 +133,6 @@ func handleContainer(w http.ResponseWriter, r *http.Request) { allSeries[s.Prefix] = s.Description } - var container *Container - children := indexChildren[""] - - if c, ok := indexContainer[ContainerId(shownId)]; ok { - children = c.Children() - container = c - } - params := struct { Error error ErrorNoSuchSeries bool @@ -152,6 +143,9 @@ func handleContainer(w http.ResponseWriter, r *http.Request) { ErrorWouldContainItself bool ErrorContainerInUse bool Container *Container + NewDescription *string + NewSeries string + NewParent *string Children []*Container AllSeries map[string]string }{ @@ -163,10 +157,24 @@ func handleContainer(w http.ResponseWriter, r *http.Request) { ErrorCannotChangeNumber: err == errCannotChangeNumber, ErrorWouldContainItself: err == errWouldContainItself, ErrorContainerInUse: err == errContainerInUse, - Container: container, - Children: children, + Children: indexChildren[""], AllSeries: allSeries, } + if c, ok := indexContainer[ContainerId(shownId)]; ok { + params.Children = c.Children() + params.Container = c + } + if description, ok := r.Form["description"]; ok { + params.NewDescription = &description[0] + } + if series, ok := r.Form["series"]; ok { + // It seems impossible to dereference strings in text/template so that + // `eq` can be used, and we don't actually need a null value here. + params.NewSeries = series[0] + } + if parent, ok := r.Form["parent"]; ok { + params.NewParent = &parent[0] + } executeTemplate("container.tmpl", w, ¶ms) } |