diff --git a/server/server.go b/server/server.go index 6d51c61..c1b3a2a 100644 --- a/server/server.go +++ b/server/server.go @@ -266,15 +266,15 @@ func (server *Server) uiFilesHandler(w http.ResponseWriter, r *http.Request) err } leaf, err := tree.Get(id) if err != nil { - leaf.Title = "My New File" + leaf.Meta.Title = "My New File" } data := map[string]interface{}{ "This": map[string]interface{}{ - "Title": leaf.Title, + "Title": leaf.Meta.Title, "Content": leaf.Content, "ID": id.String(), "PID": id.Pop().String(), - "PTitle": parent.Title, + "PTitle": parent.Meta.Title, }, "Tree": string(branchesJSON), } @@ -357,7 +357,10 @@ func (server *Server) apiV0FilesPostHandler(w http.ResponseWriter, r *http.Reque pid := server.fileId(r) id := NewID(pid).Push(strings.Split(uuid.New().String(), "-")[0]) - if err := server.tree().Put(id, Leaf{Title: r.Header.Get("Title"), Content: string(b)}); err != nil { + leaf := Leaf{} + leaf.Meta.Title = r.Header.Get("Title") + leaf.Content = string(b) + if err := server.tree().Put(id, leaf); err != nil { return err } return json.NewEncoder(w).Encode(map[string]map[string]string{ @@ -381,7 +384,7 @@ func (server *Server) apiV0FilesIDGetHandler(w http.ResponseWriter, r *http.Requ return err } - w.Header().Set("Title", leaf.Title) + w.Header().Set("Title", leaf.Meta.Title) _, err = w.Write([]byte(leaf.Content)) return err } @@ -398,7 +401,7 @@ func (server *Server) apiV0FilesIDDelHandler(w http.ResponseWriter, r *http.Requ } else if err != nil { return err } - leaf.Deleted = true + leaf.Meta.Deleted = true return server.tree().Put(id, leaf) } @@ -430,8 +433,8 @@ func (server *Server) apiV0FilesIDPutHandler(w http.ResponseWriter, r *http.Requ } leaf.Content = string(b) - leaf.Title = r.Header.Get("Title") - leaf.Deleted = false + leaf.Meta.Title = r.Header.Get("Title") + leaf.Meta.Deleted = false if err := server.tree().Put(id, leaf); err != nil { return err @@ -479,18 +482,18 @@ func (server *Server) _apiV0SearchHandler(query string) ([][2]string, error) { result := [][2]string{} if err := tree.ForEach(func(id ID, leaf Leaf) error { for _, pattern := range patterns { - if !pattern.MatchString(leaf.Content) && !pattern.MatchString(leaf.Title) { + if !pattern.MatchString(leaf.Content) && !pattern.MatchString(leaf.Meta.Title) { return nil } } - title := leaf.Title + title := leaf.Meta.Title pid := id.Pop() for pid != "" { parent, err := server.tree().Get(pid) if err != nil { return err } - title = path.Join(parent.Title, title) + title = path.Join(parent.Meta.Title, title) pid = pid.Pop() } result = append(result, [2]string{id.URLSafeString(), title}) diff --git a/server/server_test.go b/server/server_test.go index a3a3325..df5d51c 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -31,11 +31,19 @@ func TestServerRoutes(t *testing.T) { ensureAndWrite(server.diskMediaPath("delid"), []byte("hi")) tree := server.tree() - if err := tree.Put(NewID("getfid"), Leaf{Title: "", Content: "getfid body"}); err != nil { + leaf := Leaf{Content: "getfid body"} + if err := tree.Put(NewID("getfid"), leaf); err != nil { t.Fatal(err) } - tree.Put(NewID("putfid"), Leaf{Title: "putfid title", Content: "initial putfid body"}) - tree.Put(NewID("delfid"), Leaf{Title: "delfid title", Content: "delfid body"}) + + leaf.Meta.Title = "putfid title" + leaf.Content = "initial putfid body" + tree.Put(NewID("putfid"), leaf) + + leaf.Meta.Title = "delfid title" + leaf.Content = "delfid body" + tree.Put(NewID("delfid"), leaf) + t.Log(tree.GetRoot()) ensureAndWrite(path.Join(server.root, "index.html"), []byte("mom")) @@ -207,7 +215,7 @@ func TestServerPutTreeGetFile(t *testing.T) { if w.Code != http.StatusOK { t.Fatal(w) } - if !bytes.Contains(w.Body.Bytes(), []byte(`{"Title":"my title","Deleted":false,"Content":"`)) { + if !bytes.Contains(w.Body.Bytes(), []byte(`{"Meta":{"Title":"my title","Deleted":false},"Content":"`)) { t.Fatal(w) } var branch Branch @@ -220,11 +228,11 @@ func TestServerPutTreeGetFile(t *testing.T) { } if parent, ok := branch.Branches["my pid"]; !ok { t.Error(ok, branch) - } else if parent.Leaf.Title != "Untitled" { + } else if parent.Leaf.Meta.Title != "Untitled" { t.Error(parent.Leaf) } else if child, ok := parent.Branches[NewID(id)]; !ok { t.Error(ok, NewID("my pid").Push(id), parent) - } else if child.Leaf.Title != "my title" { + } else if child.Leaf.Meta.Title != "my title" { t.Error(child.Leaf) } }) diff --git a/server/testdata/ui b/server/testdata/ui index f6bb95a..bdc3513 120000 --- a/server/testdata/ui +++ b/server/testdata/ui @@ -1 +1 @@ -../../ui/ \ No newline at end of file +../public/ui \ No newline at end of file diff --git a/server/tree.go b/server/tree.go index 299f861..ea3f7f0 100644 --- a/server/tree.go +++ b/server/tree.go @@ -35,19 +35,21 @@ func (branch Branch) forEach(preid ID, foo func(ID, Leaf) error) error { } type Leaf struct { - Title string - Deleted bool + Meta struct { + Title string + Deleted bool + } Content string } func (base Leaf) Merge(updated Leaf) Leaf { - if updated.Title != "" { - base.Title = updated.Title + if updated.Meta.Title != "" { + base.Meta.Title = updated.Meta.Title } - if base.Title == "" { - base.Title = "Untitled" + if base.Meta.Title == "" { + base.Meta.Title = "Untitled" } - base.Deleted = updated.Deleted + base.Meta.Deleted = updated.Meta.Deleted base.Content = updated.Content return base } @@ -147,14 +149,14 @@ func (tree Tree) getRoot(pid ID, withContent, withDeleted bool) (Branch, error) if !withContent { m.Leaf.Content = "" } - if m.Leaf.Deleted && !withDeleted { + if m.Leaf.Meta.Deleted && !withDeleted { return m, nil } } else if entry.IsDir() { subtree := tree.WithRoot(path.Join(tree.root, entry.Name())) if branch, err := subtree.getRoot(pid.Push(entry.Name()), withContent, withDeleted); err != nil { return Branch{}, err - } else if !branch.IsZero() && (!branch.Leaf.Deleted || withDeleted) { + } else if !branch.IsZero() && (!branch.Leaf.Meta.Deleted || withDeleted) { m.Branches[pid.Push(entry.Name())] = branch } } @@ -208,10 +210,10 @@ func (tree Tree) Del(id ID) error { if err != nil { return err } - if got.Deleted { + if got.Meta.Deleted { return nil } - got.Deleted = true + got.Meta.Deleted = true return tree.Put(id, got) } diff --git a/server/tree_test.go b/server/tree_test.go index f4d56dc..977fe09 100644 --- a/server/tree_test.go +++ b/server/tree_test.go @@ -13,7 +13,9 @@ func TestTreeForEach(t *testing.T) { id := "" for i := 0; i < 5; i++ { id = path.Join(id, strconv.Itoa(i)) - if err := tree.Put(NewID(id), Leaf{Title: id, Content: id}); err != nil { + leaf := Leaf{Content: id} + leaf.Meta.Title = id + if err := tree.Put(NewID(id), leaf); err != nil { t.Fatal(err) } } @@ -42,7 +44,7 @@ func TestTreeDel(t *testing.T) { t.Fatal(err) } else if got, err := tree.Get(NewID("id")); err != nil { t.Fatal(err) - } else if !got.Deleted { + } else if !got.Meta.Deleted { t.Fatal(got) } @@ -72,11 +74,10 @@ func TestTreeCrud(t *testing.T) { t.Fatal(err) } - want := Leaf{ - Title: "leaf title", - Deleted: false, - Content: "leaf content", - } + want := Leaf{} + want.Meta.Title = "leaf title" + want.Meta.Deleted = false + want.Content = "leaf content" if err := tree.Put(NewID("id"), want); err != nil { t.Fatal(err) } else if l, err := tree.Get(NewID("id")); err != nil {