diff --git a/server/entities.go b/server/entities.go index 0403279..96cc7f0 100644 --- a/server/entities.go +++ b/server/entities.go @@ -10,6 +10,9 @@ import ( "path" "strings" + "github.com/gomarkdown/markdown" + "github.com/gomarkdown/markdown/html" + "github.com/gomarkdown/markdown/parser" "github.com/google/uuid" "go.mongodb.org/mongo-driver/bson/primitive" "gopkg.in/mgo.v2/bson" @@ -119,6 +122,12 @@ func (rest *REST) entitiesGetOne(w http.ResponseWriter, r *http.Request) { } resp[entity.Connections] = m } + _, md := r.URL.Query()["md"] + if md { + renderer := html.NewRenderer(html.RendererOptions{Flags: html.CommonFlags | html.TOC}) + parser := parser.NewWithExtensions(parser.CommonExtensions | parser.HeadingIDs | parser.AutoHeadingIDs | parser.Titleblock) + resp["md"] = markdownHead + string(markdown.ToHTML([]byte(one.Text), parser, renderer)) + markdownTail + } rest.respMap(w, entityScope[0], resp) } diff --git a/server/entities_test.go b/server/entities_test.go index d6613fc..3f0fe06 100644 --- a/server/entities_test.go +++ b/server/entities_test.go @@ -26,10 +26,21 @@ func TestEntities(t *testing.T) { return one.Name == "myname" }) - w = testEntitiesMethod(t, authit, rest, http.MethodGet, "/"+id, ``) + w = testEntitiesMethod(t, authit, rest, http.MethodGet, "/"+id+"?md", ``) if w.Code != http.StatusOK { t.Fatal(w.Code) } + b := w.Body.Bytes() + var markdowned map[string]struct { + MD string `json:"md"` + } + if err := json.Unmarshal(b, &markdowned); err != nil { + t.Fatal(err) + } else if len(markdowned) != 1 { + t.Fatal(len(markdowned)) + } else if len(markdowned[id].MD) == 0 { + t.Fatal(markdowned, string(b)) + } id2 := testEntitiesGetOneResponse(t, w.Body, func(one entity.One) bool { return one.Name == "myname" }) diff --git a/server/markdown.go b/server/markdown.go new file mode 100644 index 0000000..99ee018 --- /dev/null +++ b/server/markdown.go @@ -0,0 +1,10 @@ +package server + +const ( + markdownHead = `
+ + ` + markdownTail = `
` +)