96 lines
2.1 KiB
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))
|
|
}
|