diff --git a/public/images/buttons.png b/public/images/buttons.png new file mode 100755 index 0000000..68763d4 Binary files /dev/null and b/public/images/buttons.png differ diff --git a/public/images/calendar.png b/public/images/calendar.png new file mode 100755 index 0000000..6589138 Binary files /dev/null and b/public/images/calendar.png differ diff --git a/public/images/mzl.png b/public/images/mzl.png new file mode 100755 index 0000000..2707c97 Binary files /dev/null and b/public/images/mzl.png differ diff --git a/public/images/page_white_text.png b/public/images/page_white_text.png new file mode 100755 index 0000000..813f712 Binary files /dev/null and b/public/images/page_white_text.png differ diff --git a/server/ajax/list.go b/server/ajax/list.go index e3ae122..f840834 100755 --- a/server/ajax/list.go +++ b/server/ajax/list.go @@ -21,10 +21,6 @@ func (a *Ajax) loadLists(w http.ResponseWriter, r *http.Request) error { }) } -func (a *Ajax) changeOrder(w http.ResponseWriter, r *http.Request) error { - return errors.New("not impl") -} - func (a *Ajax) addList(w http.ResponseWriter, r *http.Request) error { newList, err := list.New(r) if err != nil { diff --git a/server/ajax/storage.go b/server/ajax/storage.go index 11562ec..e43013c 100755 --- a/server/ajax/storage.go +++ b/server/ajax/storage.go @@ -16,12 +16,18 @@ func (a *Ajax) Cur(r *http.Request) (string, string, []string) { listID := form.Get(r, "list") taskID := form.Get(r, "id") if listID == "" { - a.storageGet(path.Join("task", taskID, "map"), &listID) + listID, _ = a.taskIDToListID(taskID) } tags, _ := r.URL.Query()["t"] return listID, taskID, tags } +func (a *Ajax) taskIDToListID(taskID string) (string, error) { + var listID string + err := a.storageGet(path.Join("task", taskID, "map"), &listID) + return listID, err +} + func (a *Ajax) storageListLists(filters ...func(t *list.List) bool) ([]*list.List, error) { results, err := a.DB.List(nil, path.Join("list"), path.Join("list", "}")) if err != nil { diff --git a/server/ajax/task.go b/server/ajax/task.go index 933383d..2f86d3b 100755 --- a/server/ajax/task.go +++ b/server/ajax/task.go @@ -6,7 +6,9 @@ import ( "fmt" "local/todo-server/server/ajax/form" "local/todo-server/server/ajax/task" + "log" "net/http" + "strconv" "strings" ) @@ -45,6 +47,10 @@ func (a *Ajax) loadTasks(w http.ResponseWriter, r *http.Request) error { if err != nil { return err } + log.Println(listID) + for _, task := range tasks { + log.Println(task.Index, task.Title) + } return json.NewEncoder(w).Encode(map[string]interface{}{"list": tasks}) } @@ -147,3 +153,56 @@ func (a *Ajax) moveTask(w http.ResponseWriter, r *http.Request) error { func (a *Ajax) parseTaskStr(w http.ResponseWriter, r *http.Request) error { return errors.New("not impl") } + +func (a *Ajax) changeOrder(w http.ResponseWriter, r *http.Request) error { + order := form.Get(r, "order") + orders := strings.Split(order, "&") + sum := 0 + zero := "" + for _, order := range orders { + taskIDDelta := strings.Split(order, "=") + if len(taskIDDelta) < 2 { + continue + } + taskID := taskIDDelta[0] + delta, _ := strconv.Atoi(taskIDDelta[1]) + if delta < 0 { + delta = -1 + } else { + delta = 0 + } + task, err := a.storageGetTask(taskID) + if err != nil { + return err + } + listID, err := a.taskIDToListID(taskID) + if err != nil { + return err + } + task.Index += delta + if err := a.storageSetTask(listID, task); err != nil { + return err + } + if delta == 0 { + zero = taskID + } + sum += delta + } + if zero == "" || sum == 0 { + return nil + } + task, err := a.storageGetTask(zero) + if err != nil { + return err + } + listID, err := a.taskIDToListID(zero) + if err != nil { + return err + } + task.Index -= sum + if err := a.storageSetTask(listID, task); err != nil { + return err + } + fmt.Fprint(w, `{"total":1}`) + return nil +} diff --git a/server/ajax/task_test.go b/server/ajax/task_test.go index 393de5a..436c5b2 100755 --- a/server/ajax/task_test.go +++ b/server/ajax/task_test.go @@ -177,3 +177,33 @@ func TestAjaxMoveTask(t *testing.T) { t.Error(err, task) } } + +func TestAjaxChangeOrder(t *testing.T) { + ajax := mockAjax() + ajax.storageSetTask("list", &task.Task{UUID: "b", Title: "c", Index: 5}) + ajax.storageSetTask("list", &task.Task{UUID: "d", Title: "e", Index: 6}) + ajax.storageSetTask("list", &task.Task{UUID: "f", Title: "g", Index: 7}) + w := httptest.NewRecorder() + r := httptest.NewRequest("POST", "/", strings.NewReader(`order=b%3d0%26d%3d-1%26f%3d-1%26`)) + r.Header.Set("Content-Type", "application/x-www-form-urlencoded") + ajax.changeOrder(w, r) + if v := w.Code; v != http.StatusOK { + t.Error(v) + } + tasks, err := ajax.storageListTasks("list") + if err != nil { + t.Fatal(err) + } + if len(tasks) != 3 { + t.Fatal(err) + } + if tasks[0].UUID != "d" { + t.Error(tasks[0]) + } + if tasks[1].UUID != "f" { + t.Error(tasks[1]) + } + if tasks[2].UUID != "b" { + t.Error(tasks[2]) + } +}