diff --git a/server/go.mod b/server/go.mod
index 34962e8..790f7e2 100644
--- a/server/go.mod
+++ b/server/go.mod
@@ -12,7 +12,10 @@ require (
local/simpleserve v0.0.0-00010101000000-000000000000
)
-require github.com/go-stack/stack v1.8.0 // indirect
+require (
+ github.com/go-stack/stack v1.8.0 // indirect
+ github.com/gomarkdown/markdown v0.0.0-20220114203417-14399d5448c4 // indirect
+)
replace local/args => ../../../../args
diff --git a/server/go.sum b/server/go.sum
index 4ca0e3a..d066906 100644
--- a/server/go.sum
+++ b/server/go.sum
@@ -57,6 +57,8 @@ github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/gomarkdown/markdown v0.0.0-20210208175418-bda154fe17d8/go.mod h1:aii0r/K0ZnHv7G0KF7xy1v0A7s2Ljrb5byB7MO5p6TU=
+github.com/gomarkdown/markdown v0.0.0-20220114203417-14399d5448c4 h1:6GlsnS3GQYfrJZTJEUsheoyLE6kLXQJDvQKIKxgL/9Q=
+github.com/gomarkdown/markdown v0.0.0-20220114203417-14399d5448c4/go.mod h1:JDGcbDT52eL4fju3sZ4TeHGsQwhG9nbDV21aMyhwPoA=
github.com/gomodule/redigo v1.8.5/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0=
github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
diff --git a/server/public/ui/files.ctmpl b/server/public/ui/files.ctmpl
index 6d7b86f..0964c4f 100644
--- a/server/public/ui/files.ctmpl
+++ b/server/public/ui/files.ctmpl
@@ -3,20 +3,18 @@
{{ .This.Title }}
- {{ template "_import" }}
+ {{ template "_import" }}
- {{ template "_searchbar" }}
+ {{ template "_searchbar" }}
- {{ template "_filetree" . }}
+ {{ template "_filetree" . }}
{{ if .This.ReadOnly }}
-
- {{ .This.Content }}
-
+ {{ template "_readonly" . }}
{{ else }}
- {{ template "_editor" . }}
+ {{ template "_editor" . }}
{{ end }}
diff --git a/server/public/ui/templates/' b/server/public/ui/templates/'
new file mode 100644
index 0000000..2758bb2
--- /dev/null
+++ b/server/public/ui/templates/'
@@ -0,0 +1,9 @@
+{{ define "_readonly" }}
+
+{{ end }}
diff --git a/server/public/ui/templates/_readonly.ctmpl b/server/public/ui/templates/_readonly.ctmpl
new file mode 100644
index 0000000..7f53400
--- /dev/null
+++ b/server/public/ui/templates/_readonly.ctmpl
@@ -0,0 +1,8 @@
+{{ define "_readonly" }}
+
+{{ end }}
diff --git a/server/server.go b/server/server.go
index f1e1642..5475e29 100644
--- a/server/server.go
+++ b/server/server.go
@@ -18,6 +18,10 @@ import (
"regexp"
"strings"
+ "github.com/gomarkdown/markdown"
+ "github.com/gomarkdown/markdown/html"
+ "github.com/gomarkdown/markdown/parser"
+
"github.com/google/uuid"
)
@@ -269,6 +273,9 @@ func (server *Server) uiFilesHandler(w http.ResponseWriter, r *http.Request) err
if err != nil {
leaf.Meta.Title = "My New File"
}
+ if leaf.Meta.ReadOnly {
+ leaf.Content = Gomarkdown([]byte(leaf.Content))
+ }
data := map[string]interface{}{
"This": map[string]interface{}{
"Title": leaf.Meta.Title,
@@ -503,3 +510,30 @@ func (server *Server) _apiV0SearchHandler(query string) ([][2]string, error) {
}
return result, nil
}
+
+func Gomarkdown(b []byte) string {
+ renderer := html.NewRenderer(html.RendererOptions{
+ Flags: html.CommonFlags | html.TOC,
+ })
+ ext := parser.NoExtensions
+ for _, extension := range []parser.Extensions{
+ parser.NoIntraEmphasis,
+ parser.Tables,
+ parser.FencedCode,
+ parser.Autolink,
+ parser.Strikethrough,
+ parser.SpaceHeadings,
+ parser.HeadingIDs,
+ parser.BackslashLineBreak,
+ parser.DefinitionLists,
+ parser.MathJax,
+ parser.Titleblock,
+ parser.AutoHeadingIDs,
+ parser.Includes,
+ } {
+ ext |= extension
+ }
+ parser := parser.NewWithExtensions(ext)
+ content := markdown.ToHTML(b, parser, renderer)
+ return string(content) + "\n"
+}