diff --git a/server/ajax/form/form.go b/server/ajax/form/form.go index 00e284b..825deb2 100755 --- a/server/ajax/form/form.go +++ b/server/ajax/form/form.go @@ -20,6 +20,12 @@ func (rc readCloser) Close() error { return nil } +func GetAll(r *http.Request, k string) []string { + r.ParseForm() + v, _ := r.Form[k] + return v +} + func Get(r *http.Request, k string) string { s := r.FormValue(k) if s == "" { diff --git a/server/ajax/list.go b/server/ajax/list.go index 7d06430..ea0142e 100755 --- a/server/ajax/list.go +++ b/server/ajax/list.go @@ -6,6 +6,7 @@ import ( "local/todo-server/server/ajax/form" "local/todo-server/server/ajax/list" "net/http" + "sort" ) type List struct{} @@ -16,6 +17,9 @@ func (a *Ajax) loadLists(w http.ResponseWriter, r *http.Request) error { return err } a.ListCnt = len(lists) + sort.Slice(lists, func(i, j int) bool { + return lists[i].Index < lists[j].Index + }) return json.NewEncoder(w).Encode(map[string]interface{}{ "total": len(lists), "list": lists, @@ -73,7 +77,25 @@ func (a *Ajax) publishList(w http.ResponseWriter, r *http.Request) error { } func (a *Ajax) changeListOrder(w http.ResponseWriter, r *http.Request) error { - return errors.New("TODO not impl") + order := form.GetAll(r, "order[]") + lists, err := a.storageListLists() + if err != nil { + return err + } + for i := range order { + listUUID := order[i] + for j := range lists { + if lists[j].UUID == listUUID { + lists[j].Index = i + if err := a.storageSetList(lists[j]); err != nil { + return err + } + } + } + } + return json.NewEncoder(w).Encode(map[string]interface{}{ + "total": len(order), + }) } func (a *Ajax) clearCompletedInList(w http.ResponseWriter, r *http.Request) error {