parent
21f671517b
commit
ff8a77beea
|
|
@ -47,5 +47,9 @@ func (id ID) withClean() ID {
|
||||||
splits[i] = t
|
splits[i] = t
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ID(path.Join(splits...))
|
clean := path.Join(splits...)
|
||||||
|
if clean == "" || clean == "." {
|
||||||
|
clean = ""
|
||||||
|
}
|
||||||
|
return ID(clean)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<header>
|
<header>
|
||||||
<title>{{ .This.Title }}</title>
|
<title>id={{ .This.ID }}, {{ .This.Title }}</title>
|
||||||
{{ template "_import" }}
|
{{ template "_import" }}
|
||||||
</header>
|
</header>
|
||||||
<body class="fullscreen tb_fullscreen lr_fullscreen" style="position: absolute">
|
<body class="fullscreen tb_fullscreen lr_fullscreen" style="position: absolute">
|
||||||
|
|
@ -11,10 +11,14 @@
|
||||||
<div class="columns thic_flex tb_buffer" style="height: calc(100% - 4rem);">
|
<div class="columns thic_flex tb_buffer" style="height: calc(100% - 4rem);">
|
||||||
{{ template "_filetree" . }}
|
{{ template "_filetree" . }}
|
||||||
<div class="thic_flex lr_fullscreen" style="margin-left: 1em; width: 5px;">
|
<div class="thic_flex lr_fullscreen" style="margin-left: 1em; width: 5px;">
|
||||||
{{ if .This.ReadOnly }}
|
{{ if eq .This.ID "" }}
|
||||||
{{ template "_readonly" . }}
|
{{ template "_about" . }}
|
||||||
{{ else }}
|
{{ else }}
|
||||||
{{ template "_editor" . }}
|
{{ if .This.ReadOnly }}
|
||||||
|
{{ template "_readonly" . }}
|
||||||
|
{{ else }}
|
||||||
|
{{ template "_editor" . }}
|
||||||
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@
|
||||||
`
|
`
|
||||||
}
|
}
|
||||||
function leafHTML(id, branch) {
|
function leafHTML(id, branch) {
|
||||||
const href="/ui/files/" + (id ? id : "#")
|
const href="/ui/files/" + (id ? id : "")
|
||||||
var nameSafeId = id.replace(/\//g, "-")
|
var nameSafeId = id.replace(/\//g, "-")
|
||||||
var parentNameSafeId = nameSafeId
|
var parentNameSafeId = nameSafeId
|
||||||
if (id.includes("/"))
|
if (id.includes("/"))
|
||||||
|
|
|
||||||
|
|
@ -242,9 +242,6 @@ func (server *Server) uiSearchHandler(w http.ResponseWriter, r *http.Request) er
|
||||||
|
|
||||||
func (server *Server) uiFilesHandler(w http.ResponseWriter, r *http.Request) error {
|
func (server *Server) uiFilesHandler(w http.ResponseWriter, r *http.Request) error {
|
||||||
id := NewID(strings.TrimPrefix(r.URL.Path, "/ui/files"))
|
id := NewID(strings.TrimPrefix(r.URL.Path, "/ui/files"))
|
||||||
if id == "" {
|
|
||||||
return server.rootHandler(w, r)
|
|
||||||
}
|
|
||||||
t, err := server.uiSubTemplates()
|
t, err := server.uiSubTemplates()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
@ -263,15 +260,18 @@ func (server *Server) uiFilesHandler(w http.ResponseWriter, r *http.Request) err
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
var parent Leaf
|
var parent Leaf
|
||||||
if id.Pop() != "" {
|
var leaf Leaf
|
||||||
parent, err = tree.Get(id.Pop())
|
if id != "" {
|
||||||
if err != nil {
|
if id.Pop() != "" {
|
||||||
return fmt.Errorf("failed to get pid %q: %v", id.Pop(), err)
|
parent, err = tree.Get(id.Pop())
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to get pid %q: %v", id.Pop(), err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
leaf, err = tree.Get(id)
|
||||||
|
if err != nil {
|
||||||
|
leaf.Meta.Title = "My New File"
|
||||||
}
|
}
|
||||||
}
|
|
||||||
leaf, err := tree.Get(id)
|
|
||||||
if err != nil {
|
|
||||||
leaf.Meta.Title = "My New File"
|
|
||||||
}
|
}
|
||||||
if leaf.Meta.ReadOnly {
|
if leaf.Meta.ReadOnly {
|
||||||
if _, ok := r.URL.Query()["edit"]; !ok {
|
if _, ok := r.URL.Query()["edit"]; !ok {
|
||||||
|
|
@ -322,7 +322,7 @@ func (server *Server) uiSubTemplates() (*template.Template, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (server *Server) rootHandler(w http.ResponseWriter, r *http.Request) error {
|
func (server *Server) rootHandler(w http.ResponseWriter, r *http.Request) error {
|
||||||
http.Redirect(w, r, "/ui/files/"+uuid.New().String()[:5], 302)
|
http.Redirect(w, r, "/ui/files", 302)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ func TestServerRoutes(t *testing.T) {
|
||||||
"v0: /: get": {
|
"v0: /: get": {
|
||||||
path: "/",
|
path: "/",
|
||||||
method: http.MethodGet,
|
method: http.MethodGet,
|
||||||
want: "/ui/files/",
|
want: "/ui/files",
|
||||||
},
|
},
|
||||||
"v0: search: get": {
|
"v0: search: get": {
|
||||||
path: "/api/v0/search?q=getf%20bod",
|
path: "/api/v0/search?q=getf%20bod",
|
||||||
|
|
@ -102,17 +102,17 @@ func TestServerRoutes(t *testing.T) {
|
||||||
"v0: /: redir": {
|
"v0: /: redir": {
|
||||||
path: "/",
|
path: "/",
|
||||||
method: http.MethodGet,
|
method: http.MethodGet,
|
||||||
want: "/ui/files/",
|
want: "/ui/files",
|
||||||
},
|
},
|
||||||
"v0: /ui/: redir": {
|
"v0: /ui/: redir": {
|
||||||
path: "/ui/",
|
path: "/ui/",
|
||||||
method: http.MethodGet,
|
method: http.MethodGet,
|
||||||
want: "/ui/files/",
|
want: "/ui/files",
|
||||||
},
|
},
|
||||||
"v0: /ui: redir": {
|
"v0: /ui: redir": {
|
||||||
path: "/ui",
|
path: "/ui",
|
||||||
method: http.MethodGet,
|
method: http.MethodGet,
|
||||||
want: "/ui/files/",
|
want: "/ui/files",
|
||||||
},
|
},
|
||||||
"v0: /ui/search": {
|
"v0: /ui/search": {
|
||||||
path: "/ui/search",
|
path: "/ui/search",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue