package html
import (
"fmt"
"strings"
"github.com/dustin/go-humanize"
)
type Entry struct {
IsDir bool
Name string
Size int64
}
func FileListPage(req string, entries []Entry) string {
header := `
home | leech.ontake.dev
`
footer := `
`
body := ""
entriesWithParent := []Entry{}
if req != "" {
entriesWithParent = append(entriesWithParent, Entry{
IsDir: true,
Name: "..",
Size: -1,
})
}
entriesWithParent = append(entriesWithParent, entries...)
for _, dirEntry := range entriesWithParent {
formattedSize := ""
if dirEntry.Size != -1 {
formattedSize = humanize.Bytes(uint64(dirEntry.Size))
}
icon := "/assets/images/fileicon.png"
if dirEntry.IsDir {
icon = "/assets/images/diricon.png"
}
link := "/" + req + "." + dirEntry.Name
if dirEntry.Name == ".." {
splitReq := strings.Split(req, ".")
link = "/" + strings.Join(splitReq[:len(splitReq)-1], ".")
}
if req == "" {
link = "/" + req + dirEntry.Name
}
if !dirEntry.IsDir {
link = "/serve/" + strings.ReplaceAll(req, ".", "/") + "/" + dirEntry.Name
}
body += fmt.Sprintf(`%s
%s
`, link, icon, dirEntry.Name, formattedSize)
}
return header + body + footer
}