jldb/fstore/pages/page.go

96 lines
2.1 KiB
Go

package pages
import (
"html/template"
"io"
"path/filepath"
)
type Page struct {
Path string
Dirs []string
Files []string
// Created in Render.
BreadCrumbs []Directory
}
func (ctx Page) FullPath(dir string) string {
return filepath.Join(ctx.Path, dir)
}
func (ctx Page) Render(w io.Writer) {
crumbs := []Directory{}
current := Directory(ctx.Path)
for current != "/" {
crumbs = append([]Directory{current}, crumbs...)
current = Directory(filepath.Dir(string(current)))
}
ctx.BreadCrumbs = crumbs
authRegisterTmpl.Execute(w, ctx)
}
var authRegisterTmpl = template.Must(template.New("").Parse(`
<html>
<head>
<link rel="stylesheet" href="/static/css/pure-min.css">
<style>
body {
padding: 2em;
}
input[type=file] {
padding: 0.4em .6em;
display: inline-block;
border: 1px solid #ccc;
box-shadow: inset 0 1px 3px #ddd;
border-radius: 4px;
vertical-align: middle;
box-sizing: border-box;
width: 350px;
max-width: 100%;
}
</style>
</head>
<body>
<h1>
<a href="/">root</a> / {{range .BreadCrumbs}}<a href="{{.}}">{{.Name}}</a> / {{end -}}
</h1>
<form class="pure-form" method="post" enctype="multipart/form-data">
<fieldset>
<legend>Upload a file</legend>
<input type="hidden" name="Action" value="Upload">
<input id="File" name="File" type="file">
<input type="text" id="Path" name="Path" placeholder="Relative path (optional)" />
<button type="submit" class="pure-button pure-button-primary">Upload</button>
</fieldset>
</form>
<a href="../">../</a><br>
{{range .Dirs}}
<a href="{{$.FullPath .}}">{{.}}/</a><br>
{{end}}
{{range .Files}}
<form style="display:inline-block; margin:0;" method="post" enctype="multipart/form-data">
<input type="hidden" name="Action" value="Delete">
<input type="hidden" id="Path" name="Path" value="{{$.FullPath .}}">
[<a href="#" onclick="this.closest('form').submit();return false;">X</a>]
</form>
<a href="{{$.FullPath .}}">{{.}}</a>
<br>
{{end}}
</body>
</html>
`))
type Directory string
func (d Directory) Name() string {
return filepath.Base(string(d))
}